1

How can I stop script from execution in JavaScript? In case of cross-site scripting (XSS) attacks, the fundamental requirements are injection + execution of script.

Imagine a scenario where attacker is able to inject JavaScript in a page & our goal is to stop attacker's script from execution. The injection point as an example can be any user-supplied input area.

4

4 回答 4

0

您唯一的解决方案是防止脚本被注入。您可以做几件事来实现这一目标:

  1. 永远不要相信用户的输入。这意味着表单输入、查询字符串参数、cookie 内容或从传入请求中获得的任何其他数据。
  2. 消毒您渲染的所有内容,无论您在哪里渲染。我喜欢在模板中使用两个明确命名的渲染函数来实现这一点,render并且render_unsafe. Rails 自 3.0 以来有一个类似的界面,它会清理所有模板数据,除非您特别要求未清理的渲染。拥有一个明确命名的界面将使您更容易检查您的模板,并确保未清理的渲染是例外情况,这会迫使您在每次将数据转储到模板时做出决定。
  3. 如果您必须允许用户直接运行函数,请始终通过白名单进行。让他们以字符串形式提供函数名称或其他标识符,并以 JSON 或其他可解析构造的形式提供参数。查看 Shopify 的Liquid模板系统的设计,该系统使用类似的执行安全白名单模式。
  4. 永远不要相信用户的输入。永远不会。
于 2012-06-07T08:58:30.317 回答
0

总是总是逃避你的输入。对于 XSS,使用 htmlentities() 转义 HTML 和 JS。这是一篇关于 PHP 安全性的好文章

http://www.phpfreaks.com/tutorial/php-security

于 2012-06-07T06:48:41.960 回答
0

在处理 XSS 时,基本上有两点需要注意:

  1. 逃避你的输出。转义输入只会消耗更多资源。转义用户提交的内容输出。这也意味着非转义的内容在您的数据库中,这是一件好事(如果出现误报,您可以在不丢失内容的情况下修复它,如果是新的 XSS 策略,您不需要修改所有数据库, ETC)。
  2. 保护您的 JavaScript 代码。要非常小心,不要包含一些使用缺陷eval()或类似的东西。
于 2012-06-07T07:02:05.790 回答
0

正如其他人所说,保护自己免受 XSS 攻击的最好和最简单的方法是验证输入并根据插入点正确转义输出(HTML,很可能,带有实体或 JavaScript / CSS 块 - 不太可能而且更难以正确转义)。

但是,如果您的用例正在输出应该包含任意 HTML 的原始用户输入,并且您只是想防止注入的 JavaScript 干扰您的网站,您可以:

1) 在不同的唯一域中构建内容(因此它不能与您的主文档共享 cookie),例如 xyz123.usercontent.com(对于任何用户,xyz123 都不同) 2) 等待和/或 CSP 的沙箱指令标准化在您支持的每个浏览器中(当然,拒绝访问不支持的浏览器)。

于 2012-06-07T08:15:08.887 回答