好的,我从一个非常简单的方法开始:
alert(someText);
“someText”是一个变量,用户将通过表单传递一个值。用户是否有机会传递以下文本,并在我的 Javascript 中注入一些代码?例如,用户可以在这个方法中传递这个:
“另一个文本”);警报(“下一个文本”
如果是这样,我怎样才能防止它发生?如果没有,任何人都可以提及有关 javascript 的一些安全问题吗?
好的,我从一个非常简单的方法开始:
alert(someText);
“someText”是一个变量,用户将通过表单传递一个值。用户是否有机会传递以下文本,并在我的 Javascript 中注入一些代码?例如,用户可以在这个方法中传递这个:
“另一个文本”);警报(“下一个文本”
如果是这样,我怎样才能防止它发生?如果没有,任何人都可以提及有关 javascript 的一些安全问题吗?
不,它不是那样工作的。字符串值在使用它们的地方不会被替换,它们只是用作字符串。所以不存在安全问题。
您唯一可能需要担心的是当您使用eval
:
eval("alert(\" + someText + "\");");
(是的,我意识到这是一个人为的例子......)
基本上,只要您不调用“eval”(或某些调用的函数),并且不将用户创建的 Javascript 直接注入页面(通过 script 标签),您就不必担心关于。
一旦你在 javascript 中有一个变量,除非你用它做一个 eval 或设置一个 DOM 元素的 innerHTML 属性,否则它就没有多大关系了。
除此之外,是否存在注入的可能性取决于您如何从表单获取 javascript 的值。
例如,如果表单正在提交到服务器,并且变量的值是通过在服务器端编写 javascript 来设置的,那么您可能会遇到问题。这样的事情显然会使脚本打开以供注入。
var someText = "<?php echo $_POST["someText"]; ?>";
因此,在不知道如何从表单中获取价值的情况下,很难说是否存在安全问题。以我的经验,服务器端代码是大多数 XSS 向量的原因。就 javascript 而言,您通常只需要注意 eval 和 innerHTML。
如果 "someText" 是由服务器渲染的,例如 JSP、velocity, 那么它是危险的
例如
<script>
alert({{someText}})
</script>
那么在 JavaScript 运行前,在解析 HTML 时,很危险
但是如果, “sometext” 是 javascript 变量,@Zifre 的回答是对的;
另外,除了“eval”关键字,new Function(sometext)、 location.href= sometext ......可能会引发一些攻击