首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恶意搜索尝试在Magento的热门搜索词中显示?

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

Stack Overflow用户
提问于 2012-04-29 21:15:52
回答 3查看 1.6K关注 0票数 2

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

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

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-30 01:11:24

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-30 00:33:18

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-29 22:03:01

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10372402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档