Unity Web 游戏是不是容易受到跨站点脚本的影响
Posted
技术标签:
【中文标题】Unity Web 游戏是不是容易受到跨站点脚本的影响【英文标题】:Are Unity Web Games susceptible to Cross site scriptingUnity Web 游戏是否容易受到跨站点脚本的影响 【发布时间】:2018-07-09 15:28:34 【问题描述】:专门针对为 Web 编译的 Unity 游戏。
由于 Unity 的 Web 导出器以 html5 为目标,这是否使其容易受到 XSS 攻击。假设有一个多人游戏,用户可以在其中输入和保存将被游戏中所有玩家查看的文本。恶意用户是否能够注入一些 javascript,然后在所有运行游戏的客户端中执行可以看到输入的文本?
【问题讨论】:
XSS 只有在您加载带有未经处理的用户输入的 HTML 模板并将生成的 HTML 发送给客户端时才可能发生。如果用户输入只是被渲染而不被执行,那么应该没有任何问题。请记住,在这个意义上,浏览器 执行 HTML,但浏览器不能“执行”通过 WebGL 呈现的内容。只是不要做一些愚蠢的事情,比如将未经处理的用户输入注入 WebGL 着色器。 这个问题与 WebGL 完全无关。发问者使用 Unity 极差的命名选择来支持 Unity 导出到 HTML5 的功能,因此几乎所有关于该导出路径的问题都在 SO 上被错误标记,并且发问者不知道他们的术语是错误的。从 Unity 导出到 HTML5 的游戏的 XSS 问题与任何其他 HTML5 页面没有什么不同。不多也不少。 @gman 感谢您的澄清,据我所知,Unity 的网页游戏是建立在 WebGL 之上的,您认为我的问题更侧重于统一是正确的。我将编辑问题以澄清这一点。 Unity 的网页游戏是在 HTML5 之上构建的。 Unity 错误地称为 tbat WebGL。 Unity 网页游戏使用 HTML5 的特性,包括 Web Audio、Web Assembly、GamePad API、JavaScript、Fullscreen API、Pointer Lock API、Blob API、XMLHTTPRequest API、WebGL API 和其他 API 都是 HTML5 的一部分。如果 Unity 实际导出到 WebGL,则它无法加载文件、播放声音,也无法从鼠标、键盘、触摸屏、游戏手柄等获取用户输入,因为 WebGL 不执行这些操作 【参考方案1】:是的,在某种程度上。如果您允许未经处理的代码进入您的网页,无论是 JS 还是 WebGL 着色器或其他任何东西,它都可以并且将会执行和利用您的用户。
话虽如此,我从未听说过在 XSS 中使用 WebGL。在某些方面,可能是因为将一个小脚本注入页面比启动和运行完整的着色器更容易(而且人们已经这样做了更长的时间)。更重要的是,XSS 攻击通常是关于窃取用户的信息,或者让他们自动“采取行动”他们没有授权做,或类似的。使用大量 GPU 功能对于实现 XSS 黑客的目标并没有多大用处。
如果我们确实看到 WebGL 在 XSS 攻击中使用,我猜这可能是一种加密方案,因为这是少数可以从 GPU 的处理能力类型中受益的东西之一。
为了缓解这种情况,就像所有 XSS 一样,清理、清理、清理! 确保从客户端到服务器再到客户端的任何步骤都不能让用户在该框中输入的内容自行执行任何操作, Javascript、SQL、WebGL,什么都没有。
【讨论】:
我不确定谁会积极反对这个问题收到的每个答案,但如果您对我们如何改进答案有更好的答案或建议,我很想听听他们的意见.【参考方案2】:答案很大程度上取决于您的服务器是如何设置的,但一般来说,您发送到服务器并处理的任何数据未经清理都会使其容易受到 XSS 攻击。同样,这取决于您对这些数据的处理方式,但始终清理您的数据是一种很好的做法。除非您在服务器中运行 WebGL 实例来处理该数据,否则这里没有什么特别针对 WebGL 的。
【讨论】:
我认为有一点是要避免使用从用户输入拼凑起来的字符串创建着色器,因为如果 WebGL 实现中存在任何漏洞,这可能是一个潜在的攻击向量,可以直接访问 GPU。 如果你可以跨脚本,那么你可以做任何你想做的事情。这意味着创建您自己的 WebGL 上下文或音频上下文或工作线程等。以上是关于Unity Web 游戏是不是容易受到跨站点脚本的影响的主要内容,如果未能解决你的问题,请参考以下文章
Playframework 中的跨站点脚本和 Web 参数篡改预防
在 Java Web 项目中显示 BLOB 对象,避免持久的跨站点脚本?