gpt4 book ai didi

javascript - 使用 JS 为您的 Web 应用程序编写编程语言,将其编译为带有 PHP 的 JS,以确保彻底过滤用户上传的 html5 Canvas 动画?

转载 作者:行者123 更新时间:2023-11-28 10:59:40 25 4
gpt4 key购买 nike

对我提出的一个公认的类似问题的持续跟进:What security restrictions should be implemented in allowing a user to upload a Javascript file that directs canvas animation?

我喜欢认为我对 JS 的了解足够好,并且我在我接触过的所有 XSS 示例中看到了共同的特征,我对此有些熟悉。我缺乏可以绕过安全可靠、合理编程的系统的良好 XSS 示例。我希望人们将 html5 Canvas 创作上传到我的网站上。还有这样的网站吗?人们似乎一直对此感到害怕,但是如果您只是想为自己好玩而做这件事,并且如果服务器发生了问题,那么哦,好吧,这只是一个动画网站,无论如何信息都会像野火一样传播,所以如果有人关心的话我会告诉他们不要注册。

如果我允许单个文本区域表单字段充当使用 JS 的 IDE,用于我用 JS 编写的编程语言,并在最终将其编译为 JS 以由 PHP 回显之前对用户的语法进行字符串替换、过滤和验证,托管该内容对我来说会有多糟糕?请告诉我如何绕过我所有的综合考虑因素,同时也考虑到服务器端:

  • 如果 JavaScript 被禁用,则会阻止任何 POST 通过,从而持续跟踪用户 session 。
  • 对类进行命名空间,因此它们只能在其函数和方法中添加 EXAMPLE 前缀。
  • 制作实例
  • 将我的 JS 框架存储在外部(在浏览器中不可变?)JS 文件中,该文件需要位于页面顶部才能接受表单中的单个文本区域字段,以及服务器生成的 key 必须遵循它。在托管已编译的用户上传的 Canvas 游戏/动画(每页仅 1 个)的页面上,服务器将在回显其余部分之前验证正确的 JS 文件名字符串。
  • 没有外部脚本调用!客户端和服务器上的字符串替换。
  • 仅允许字母数字字符、破折号和星号。
  • 删除警报、评估、窗口、XMLHttpRequest、原型(prototype)、cookie 和明显的东西。没有原生 JS 保留字或语法。
  • 混淆和缩小另一个外部 JS 文件,该文件有助于为 IDE 提供服务并识别编程语言的唯一命名的 Canvas API 方法。
  • 当 Window 卸载时,将外部 JS 代码存储到两个动态生成的表单字段中,以便服务器在 POST 中检查。所有原始代码都将在数据库中彻底编目以进行过滤。
  • 严格的变量命名约定('example-square1-lengthPROPERTY'、'example-circle-spinMETHOD')
  • 禁用复制/粘贴,setInterval 不断检查用户是否启用。如果是这样,则触发对数据库的阻止,立即更改 window.location 并通过 POST 检查 session ID 以确认 JS 在该时间范围内是否被禁用。

我的意思是,我可以这样做吗?如果一个人不能使用 HEX 或 ASCII 之类的东西,怎么能造成伤害呢?

最佳答案

我认为还有其他一些选择。

顺便说一下,进行现实生活中的 XSS 测试的好地方是 XSS Cheat SheetHTML5 Security Cheetsheet (较新)。然而,问题在于您希望允许 Javascript,但不允许 Javascript。与通过阻止所有脚本来防止 XSS 的常用方法相比,这是一个不同且更复杂的目标。

托管在单独的域上

我见过这被称为“iframe jail ”。

XSS 攻击的目标是能够在与您的站点相同的上下文中运行代码 - 即在相同的域中。这是因为代码将能够读取和设置该域的 cookie、启动用户操作或纠正您的设计、重定向等。

但是,如果您有两个独立的域 - 一个用于您的网站,另一个仅托管不受信任的用户上传的内容,则该内容将与您的主网站隔离。您可以将其包含在 iframe 中,但它无法访问您网站的 cookie,无法纠正或更改其 iframe 之外的设计或链接,也无法访问主窗口的脚本变量(因为它位于不同的域)。

当然,它可以设置尽可能多的cookie,甚至读回它设置的cookie。但这些仍然会与您网站的 cookie 隔离。它无法影响或读取您主站点的 cookie。它还可能包含其他可能骚扰/骚扰用户的代码,例如弹出窗口,或者可能尝试网络钓鱼(您需要在 iframe 外 UI 中清楚地表明所提供的内容不是您网站的一部分)。然而,这仍然是您的主站点的沙箱,您拥有的个人有效负载 - 您的 session cookie 以及总体页面设计和脚本的完整性将被保留。它所带来的风险并不比互联网上任何可以嵌入 iframe 的网站少,但也不会多。

使用 Javascript 的子集

已经提出了 Javascript 的子集,它为脚本提供了划分 - 能够加载不受信任的代码,并且如果您不给它这样做的范围,它就无法更改或访问其他代码。

查看类似 Google CAJA 的内容- 其目标是准确启用您所描述的服务类型:

Caja allows websites to safely embed DHTML web applications from third parties, and enables rich interaction between the embedding page and the embedded applications. It uses an object-capability security model to allow for a wide range of flexible security policies, so that the containing page can effectively control the embedded applications' use of user data and to allow gadgets to prevent interference between gadgets' UI elements.

这里的一个问题是提交代码的人必须使用 CAJA API 对其进行编程。它仍然是有效的 Javascript,但它无法访问浏览器 DOM,因为 CAJA 的 API 会介导访问。这将使您的用户难以移植某些现有代码。还有一个编译阶段。由于 Javascript 不是一种安全语言,因此无法确保代码在不通过解析器运行的情况下无法访问 DOM 或其他全局变量,因此 CAJA 就是这么做的 - 它将 Javascript 输入编译为 Javascript 输出,从而强制执行其安全模型.

关于javascript - 使用 JS 为您的 Web 应用程序编写编程语言,将其编译为带有 PHP 的 JS,以确保彻底过滤用户上传的 html5 Canvas 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com