恶意搜索尝试显示在Magento的热门搜索字词中?

时间:2012-04-29 13:15:52

标签: security magento

如果你去这里,我会在Magento商店遇到一整页恶意搜索企图:http://www.princessly.com/catalogsearch/term/popular/

我的问题是,如何防止恶意搜索词组出现在热门搜索字词页面上,但仍然会向善意用户显示合法的搜索字词?

谢谢!

3 个答案:

答案 0 :(得分:1)

首先检查是否评估了注入搜索术语,或者换句话说,是否正确转义和过滤了搜索术语以防止sql注入。然后继续清理索引搜索项的数据库。 接下来我将看看索引功能,如果你在搜索功能中有足够的sql注入和xss保护,你真的不需要担心(除非它占用你的带宽,那么你可能想看一下黑名单IP或主动搜索过滤,但这会更复杂一些)。基本上,您只想存储正确的查询,最简单的方法是仅存储字母查询,但这可能非常严格,并排除其他有效查询。相反,您可以使用黑名单和正则表达式检查,但这将更难以实施和及时。 最后,您可能希望对每个时间段强制执行搜索限制,并使用useragent检查来确保某人实际搜索。您也可以使用某种类型的CAPTCHA,但这可能严重阻止用户广泛使用搜索功能,所以我不鼓励这样做。

答案 1 :(得分:1)

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

此规则不要求您以任何方式识别搜索的特定形式(它不是黑名单),因此它非常强大。此外,列出没有结果的普通搜索可能不会使您或您的客户受益,因此除了处理垃圾邮件问题之外,排除它们将是一种改进。

答案 2 :(得分:0)

可以以某种方式枚举恶意搜索词,因此当发生这种情况时,开发人员会构建一组正则表达式来检查输入的搜索词/查询是否干净,例如让我们将' OR '1'='1 SQL-Injection作为搜索输入:

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

相关问题