2012-04-29 62 views

回答

1

不要列出没有返回结果的搜索,或只返回“马虎”匹配的搜索。 “恶意搜索”可能与您网站上的任何产品不匹配,因此它们将被此规则排除。

此规则不要求您以任何方式识别搜索的具体形式(它不是黑名单),因此它是健壮的。此外,列出没有结果的普通搜索可能不会使您或您的客户受益,因此排除这些搜索将会改善垃圾邮件问题。

+0

非常感谢有用的见解。那么我该如何在Magento中做到这一点?我如何不列出不返回匹配结果的搜索?在管理面板中是否有可配置的选项,或者是否必须在我的模板中对其进行硬编码? – 2012-05-01 08:58:14

+0

不知道,对不起。我对Magento不熟悉;我只是觉得这个想法值得一提。 – 2012-05-01 10:33:41

0

恶意搜索条件可以以某种方式枚举,所以当开发人员构建一组正则表达式来检查输入的搜索词/查询是否干净时,例如,让我们以' OR '1'='1 SQL注入作为搜索输入:

目标:防止在数据库中捕获' OR '1'='1。 HOWTO:应用正则表达式,例如^'?1 (')? [Oo][Rr] (')?1(')?=1(')?$如果该正则表达式返回true,则阻止该术语被捕获,如果我们想添加更多的阻止术语,我们可以做类似于这个^('?1 (')? [Oo][Rr] (')?1(')?=1(')?)|(Other Regex)^。但是,如果条款已被捕获,那么清理数据库将是最好的解决方案,因为如果我们试图在每次显示热门搜索词时进行正则表达式检查,网站性能会下降,所以我的建议是通过在流行的术语表上运行正则表达式来清理数据库并删除具有恶意的行。

1

首先检查是否评估了注入搜索条件,换句话说,如果搜索条件已正确转义并过滤以防止sql注入。然后继续清理索引搜索条件的数据库。 接下来,我将看看索引函数,如果您在搜索功能中有足够的sql注入和xss保护,则您并不需要担心这一点(除非它耗尽了带宽,那么您可能需要查看将其列入黑名单IP或主动搜索过滤,然而这会更复杂一些)。从本质上讲,您只需要存储适当的查询,最简单的方法是仅存储按字母顺序排列的查询,但这可能会非常严格并排除其他有效查询。相反,您可以使用黑名单和正则表达式检查,但实施起来会更难以及时。 最后,您可能希望在每个时间段强加搜索限制,并使用useragent检查来确保某个人实际上正在搜索。你也可以使用某种形式的验证码,但这会严重阻止用户广泛使用搜索功能,所以我会劝阻他们。