2011-06-08 128 views
4

我只有一个关于XSS攻击的简单问题。我知道你可以通过清理表单输入来阻止它们,但我的问题是,如何搜索输入(例如在网站上进行一般搜索)?我们是否应该对搜索输入进行清理?我的意思是,这只是一个搜索输入,用户应该能够在网站上搜索他/她想要的任何内容。请向我提供一些关于此的澄清。跨站点脚本攻击(xss)攻击

谢谢

回答

7

我知道,你可以阻止他们通过消毒的形式输入

不,你应该消毒输出阻止他们。因此,在数据库(或地方),你需要传递的数据原样,并处理它,你把它给用户权限之前

+2

怎么样的SQL注入? – 2011-06-08 02:19:18

+1

@劳伦斯Cherone:那是另一个讨论。欧普特意询问了XSS。 – zerkms 2011-06-08 02:24:11

+0

除了我想在网站上正确显示html(或其他客户端字符)这一事实,为什么我必须为XSS攻击(而不是输入)清理OUTPUT?恶意代码的来源不是INPUT吗?我的意思是,用户输入客户端代码,我认为这是我应该清理(使用htmlentities())。我错过了别的吗? – user765368 2011-06-08 18:47:06

3

芹苴这已经被zerkms

做消毒从任何SQL注入回答触及数据库用户输入需要mysql_real_escape_string($_REQUEST['search'])

在输出,如果你的表现是什么用户搜索,如“您搜索的是:”用htmlentities(strip_tags($_REQUEST['search']), ENT_QUOTES);

那么你的安全,从传入和传出

+0

除了正确显示用户搜索的内容,为了保护网站免受xss攻击,不是INPUT需要清理的内容吗?是否有其他目的来消毒输出? – user765368 2011-06-08 18:48:31

1

我只想在这里添加一点。你说:

我的意思是,它只是一个搜索输入,用户应该能够搜索任何他/她想在网站上。

下面是一个问题:经常会将搜索词打印到搜索后呈现的文档中。即,“您搜索了:<什么是>”。如果您没有对这些东西进行消毒,那么您将会遇到XSS漏洞。

如果你想“但我们不这样做”,记住,你可能不这样做现在,但你可能在未来这么做。如果你现在没有封锁这个漏洞,你很可能会在后面忘记这么做 - 所以最好只是把这个漏洞扼杀在萌芽状态。

1

SQL注入XSS是两个不同的(但有点关系)的攻击。它们之间的相关性在于,本质上它归结为不可信的数据从放入它的上下文中逃逸并随后执行不可预见的操作。

对于以下建立防御的最佳实践,我建议您通过OWASP的SQL Injection Prevention Cheat Sheet及其XSS Prevention Cheat Sheet

OWASP提出的这ESAPI Project其包括工具用于编码用于不同的上下文中不可信数据可被用于:

  • encodeForSQL
  • encodeForHTML
  • encodeForHTMLAttribute
  • encodeForJavaScript
  • encodeForCSS
  • encodeForURL

该库可用于许多语言,如Java,.NET,PHP ,经典ASP,冷聚变,Python和哈斯克尔。它也能够在需要时执行输入验证。

一些使用ESAPI的组织包括美国运通,Apache Foundation,Booz Allen Hamilton,Aspect Security,Foundstone(McAfee),哈特福德,无限校园,洛克希德马丁,MITRE,美国海军 - SPAWAR,世界银行,SANS研究所。

最后 - 编码将在解释之前执行(越接近越好)。例如:就在您向UI组件提供不可信数据以呈现其编码之前。 UI组件不能信任服务器 - 它必须进行编码。