有限的 JavaScript 应用场景:攻击向量和缓解

信息安全 Web应用程序 应用安全 javascript html
2021-08-31 20:55:06

我将开发一个允许通过 textarea 输入的单页 JavaScript 应用程序。此输入永远不会发送到服务器,也不会显示给其他用户,并且只要它们在页面上,它们只会保留在浏览器内存中。任何输入都需要重新显示给输入它的用户。

  1. 在这种情况下有哪些攻击媒介?
  2. 您将采取什么措施来减轻任何攻击媒介?

对我来说,选项似乎是在添加到 DOM 之前的愚蠢的 JavaScript HTML 编码,或者只是将文本输入保持在 textarea 中并禁用它。

4个回答

两个最大的威胁是点击劫持和访问离线存储。离线存储可以通过基于 DOM 的 XSS访问,或者如果运行它的机器受到攻击。即使您的应用程序不使用 GET/POST/Fragment 作为输入,您的库之一也可能。

  • 在这种情况下有哪些攻击媒介?

基于 DOM 的 XSS 是最大的 XSS。

通常情况下,这可以允许许多事情:键盘记录、页面上的数据泄露、XSRF、重定向到网络钓鱼站点、驱动下载。

但只要它只重新显示给输入它的用户并且不持续存在,这不是一个真正的问题。

  • 您将采取什么措施来减轻任何攻击媒介?

用于document.createTextNode(plainText)将文本插入 DOM 而不是node.innerHTML = plainText.

确保您没有使用来自 URL 的数据预先填充文本框,以便用户输入的数据确实是真实的。

不允许对您的网站进行框架化,以防止攻击者的页面包装您的页面并对用户进行社会工程以将内容复制并粘贴到文本框中。

避免客户端 XSS(也称为基于 DOM 的 XSS)。阅读 OWASP 以获取有关此主题的资源。另请参阅Adam Barth 关于此主题的建议,非常棒。

一个简短的版本:看在上帝的份上,不要在用户输入到 textarea 的文本上使用setInnerHTML,document.write()或。eval()使用setInnerText(或document.createTextNode等)代替setInnerHTML.

假设没有从任何地方读取数据(例如 GET 参数),唯一可能的攻击是 html 文档在加载时被篡改。如果是本地加载的,可能是磁盘上的版本被篡改了;如果它是从没有 https 的服务器加载的,则文档可能会在传输过程中更改或在服务器上更改。

除此之外,如果没有输入或输出(除了在屏幕上输入和可见的内容;我的意思是保存到磁盘之类的东西),我看不出你可以执行哪些攻击,而你不能在其他所有输入上执行系统上的字段。

编辑:哦,错过了这一部分:Any input will need to be redisplayed to the user who has entered it.那句话之前的那句话暗示它会被删除。这可能确实是一个攻击媒介,例如当该缓存被篡改时。不过我不认为这有很大的风险。