跨站点脚本(xss)攻击

时间:2011-06-08 02:02:22

标签: php xss

我只有一个关于XSS攻击的简单问题。我知道您可以通过清理表单输入来阻止它们,但我的问题是,搜索输入如何(例如,在网站上进行常规搜索)?我们是否应该对搜索输入进行消毒?我的意思是,它只是一个搜索输入,用户应该能够在网站上搜索他/她想要的任何内容。请给我一些澄清。

谢谢

5 个答案:

答案 0 :(得分:7)

  
    

我知道您可以通过清理表单输入来阻止它们

  

不,你应该通过消毒输出来阻止它们。因此,在数据库(或任何地方),您需要按原样传递数据,并在向用户显示之前对其进行处理

答案 1 :(得分:3)

这已经被zerkms

回答了

从触及数据库的任何用户输入中对sql注入进行清理需要mysql_real_escape_string($_REQUEST['search'])

在输出时,如果您显示用户搜索的内容,例如“您搜索过:”,请使用htmlentities(strip_tags($_REQUEST['search']), ENT_QUOTES);

然后你的传入和传出

答案 2 :(得分:1)

我只想在此处再加一点讨论。你说:

  

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

这是问题所在:搜索词经常被打印到搜索后呈现的文档中。即,“你搜索过:<无论是什么>”。如果您没有对这些东西进行消毒,那么您将拥有XSS漏洞。

如果您正在考虑“但我们不这样做”,请记住您可能不会现在,但您可能会在将来这样做 >。如果你现在没有封锁这个漏洞,你可能会忘记以后再这样做 - 所以最好把这个漏掉。

答案 3 :(得分:1)

如何使用htmlpurifier ?

答案 4 :(得分: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 ,Classic ASP,Cold Fusion,Python和Haskell。如果需要,它还可以执行输入验证。

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

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