这些 javascript 方法可以被认为是 XSS 安全的吗?

Can these javascript methods be considered XSS safe?

我正在实施所谓的 "single page app",它接受 JSON 作为输入。这也意味着所有 HTML 都在浏览器中呈现,而且所有模板(我正在使用 knockout)似乎不受用户输入的影响,因为模板不是由后端动态构建的,而是静态嵌入到客户。换句话说,我不会做这样的事:

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 攻击 - 如果 "yes", 这怎么可能?

我相信这四个功能是安全的。 document.createTextElement 方法 appears to be safe 和其他方法的 none 能够将对象添加到 DOM.

为了发起 XSS 攻击,攻击者必须能够将现有脚本劫持到 运行 任意代码(为什么 eval 是邪恶的)或通过向量插入他们自己的脚本,例如 <script> 标签。由于您使用的方法无法向 DOM 添加元素,它们也无法操纵事件处理程序,因此我认为您是安全的。

不过,我们还需要能够看到您的更多后端代码才能进行该调用,但在前端看起来没问题。

您的 JavaScript 是否容易受到跨站点脚本 (XSS) 攻击是一个问题,它是否安全是另一个问题。 XSS 的想法是攻击者将代码放入您的系统,然后由另一个用户运行,它可能会将他们重定向到另一个(潜在恶意)站点。

如果您不将输入数据存储到您的系统,然后将其显示给其他用户,那么您就不会受到 XSS 攻击。用户只能攻击自己,我认为这是没有意义的。

但是,如果您将输入数据存储到您的系统,那么您就有一个潜在的问题(如果不了解您的后端很难知道)。但是无论你通过 JavaScript 提交什么,无论你将它发送到哪里,后端都必须在存储之前对其进行处理(验证和验证)以确保它不是恶意的。

底线是不要依赖 JavaScript。无论您的脚本是 10 行还是 1,000,000 行,都可以通过前端进行操作,因为它 运行 是客户端。您可以在 Google Chrome 中使用检查器自行尝试。