我正在实施一个所谓的"单页应用程序"它接受JSON作为输入。这也意味着所有HTML都在浏览器中呈现,所有模板(使用敲除)似乎都不受用户输入的影响,因为模板不是由后端动态构建的,而是静态地嵌入到客户端中。换句话说,我不是这样的:
echo '<input type="text" value="$var">'
因此,所有用户内容的呈现都归结为这些JS方法:
document.createTextNode(userVar); // for displaying static text
inputElement.value = userVar; // for populating input fields
document.title = userVar; // some user input can be reflected in the doc title
window.history.pushState = ... // no user input is set here directly, but there are URIs where this could be set using an outside link
所以现在的问题是:这些方法是否全部 100%XSS安全?或者是否仍有任何方法可以触发XSS攻击 - 如果&#34;是&#34;,怎么可以这样做?
答案 0 :(得分:3)
我相信这四个功能是安全的。 document.createTextElement
方法appears to be safe,其他任何方法都无法向DOM添加对象。
为了发起XSS攻击,攻击者必须能够劫持现有脚本以运行任意代码(为什么eval是邪恶的)或者通过<script>
标记等向量插入自己的脚本。由于您使用的方法不能向DOM添加元素,也无法操纵事件处理程序,我认为您是安全的。
然而,我们还需要能够看到更多的后端代码来进行调用,但是在前端看起来还不错。
答案 1 :(得分:1)
您的JavaScript是否容易受到跨站点脚本(XSS)的影响是一个问题,它是否安全是另一个问题。使用XSS的想法是攻击者将代码放入您的系统,然后由另一个用户运行,例如,它可能会将它们重定向到另一个(可能是恶意的)站点。
如果您未将输入数据存储到系统中,然后将其显示给其他用户,那么您可以安全地使用XSS。用户只能攻击自己,这在我看来毫无意义。
但是,如果您将输入数据存储到系统中,则存在潜在问题(在不知道后端的情况下很难知道)。但无论你通过JavaScript提交什么,无论你发送它,后端都必须在存储之前处理(验证和验证)它,以确保它不是恶意的。
底线不依赖于JavaScript。无论您的脚本是10行还是1,000,000行,它都可以通过前端进行操作,因为它运行在客户端。您可以使用检查器在Google Chrome中自行尝试。