Magento 的热门搜索术语中显示恶意搜索尝试?

问题描述 投票:0回答:4

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

我的问题是,如何防止恶意搜索短语出现在“热门搜索词”页面上,同时仍显示来自善意用户的合法搜索词?

谢谢!

security magento
4个回答
1
投票

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

该规则不要求您以任何方式识别搜索的具体形式(它不是黑名单),因此它是稳健的。此外,列出没有结果的普通搜索可能不会给您或您的客户带来好处,因此排除它们将是一个超越处理垃圾邮件问题的改进。


1
投票

首先检查注入搜索词是否被评估,或者换句话说,搜索词是否被正确转义和过滤以防止sql注入。然后继续清理数据库中的索引搜索词。 接下来我会研究一下索引功能,如果你在搜索功能中有足够的sql注入和xss保护,你真的不需要担心这一点(除非它占用了你的带宽,那么你可能想研究一下将 IP 列入黑名单或主动搜索过滤,但会稍微复杂一些)。本质上,您只想存储正确的查询,最简单的方法是仅存储按字母顺序排列的查询,但这可能会受到很大的限制并排除其他有效的查询。相反,您可以使用黑名单和正则表达式检查,但这会更难以实施和及时。 最后,您可能想要对每个时间段施加搜索限制,以及诸如用户代理之类的检查以确保一个人确实在搜索。您还可以使用某种验证码,但这可能会严重阻止用户广泛使用搜索功能,所以我不鼓励这样做。


0
投票

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

' OR '1'='1
SQL 注入作为搜索输入:

目标:防止

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


0
投票

您可以创建一个覆盖 Magento 目录搜索控制器的模块。在那里,您可以检查非英语字符。如果有非英文字符可以重定向到主页。

您可以在此处查看更多内容http://dev-vibes.com/forum/topic/magento-prevent-spammy-search-terms

© www.soinside.com 2019 - 2024. All rights reserved.