7

即使是像 Twitter 这样的知名网站也存在 XSS 漏洞,我们应该怎么做才能防止这种攻击呢?

4

3 回答 3

8

您可以做的第一件事是将您的 cookie 设置为仅 HTTP ......这至少可以防止会话 cookie 劫持。当您可能是自己网站的管理员时,就像有人窃取您的 cookie 一样。

剩下的就是验证所有用户输入。

  • 规则 #0 - 切勿插入不受信任的数据,除非在允许的位置
  • 规则 #1 - 在将不受信任的数据插入 HTML 元素内容之前进行 HTML 转义
  • 规则 #2 - 在将不受信任的数据插入 HTML 通用属性之前进行属性转义
  • 规则 #3 - 在将不受信任的数据插入 HTML JavaScript 数据值之前 JavaScript 转义
  • 规则 #4 - 在将不受信任的数据插入 HTML 样式属性值之前进行 CSS 转义
  • 规则 #5 - 在将不受信任的数据插入 HTML URL 属性之前进行 URL 转义

在这里详细讨论的非常冗长的主题:

http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

http://www.owasp.org/index.php/Cross_site_scripting

XSS 只是众多漏洞利用之一,每个 Web 开发人员都应该牢记前 10 名 OWASP,恕我直言

http://www.owasp.org/index.php/Top_10_2007

于 2009-05-03T04:13:59.330 回答
2

就像您可以通过使用准备好的语句使 SQL 注入成为非问题一样,您可以通过使用执行类似操作的模板引擎(DOM 序列化程序)使 XSS 非问题。

设计您的应用程序,以便所有输出都通过模板引擎。使模板引擎默认对所有数据进行 HTML 转义。这样,您将拥有默认安全的系统,并且不依赖于人类(以及大型系统的其余部分)勤奋地转义 HTML。

于 2009-05-25T20:32:31.923 回答
1

我不知道你用什么来写你的代码,但如果你使用 asp.net,你会被部分覆盖。asp.net 有他们所谓的请求验证,当启用时,它可以防止通过用户输入引入恶意脚本。

但有时,您必须允许使用某种文本编辑器,例如您在此问题中键入的那种。在这种情况下,您必须部分禁用请求验证以允许最终用户输入一些“富文本”html。在这种情况下,您将不得不构建某种白名单过滤机制。

仅供参考,我不知道其他人,但 Microsft 有一个名为 Anti-Xss 的库。

于 2009-05-03T03:53:15.167 回答