如何防止 XSS,使用 textarea 创建 javascript 代码

How to protect from XSS, with textarea to create javascript code

我有一个文本区域,我会让一些用户在文本区域内创建反应组件,他们将能够保存、编辑它们。我希望能够执行 javascript 而不会受到 xss 攻击。

此 javascript 将用于为创建它们的用户创建图形和其他图形组件。

这将极具挑战性,即使有函数白名单。您可以考虑加载一个与域无关的新页面,这样它就不会有会话数据的 cookie。它将位于不受信任的单独域上。

  1. 任意JavaScript的"sanitisation"注定要失败,但是Caja project定义了JavaScript和DOM 可以静态分析,可以拒绝可疑脚本(不幸的是,当它不能完全理解它们时,也可以拒绝良性脚本)。

  2. 更好的方法可能是简单地按原样执行 JavaScript,但在单独的域上。这样,您的站点将受到 同源策略 的保护,就像浏览器保护所有站点免受彼此攻击一样。

如果您使用 cookie,您将需要一个完全独立的 TLD(因为任何子域上的脚本都可能毒化整个域上的 cookie)。这就是 Google 采用 googleusercontent.com 的方法,用于 运行 用于 Google 翻译等的任意脚本页面

当您 运行 在单独的域上通过 iframe 使用 JS 时,您需要使用 postMessage 在您的页面和不受信任的脚本之间进行通信。确保仔细验证收到的消息,就像任何用户输入或 API 调用一样。