2

好的,我从一个非常简单的方法开始:

alert(someText);

“someText”是一个变量,用户将通过表单传递一个值。用户是否有机会传递以下文本,并在我的 Javascript 中注入一些代码?例如,用户可以在这个方法中传递这个:

“另一个文本”);警报(“下一个文本”

如果是这样,我怎样才能防止它发生?如果没有,任何人都可以提及有关 javascript 的一些安全问题吗?

4

4 回答 4

7

不,它不是那样工作的。字符串值在使用它们的地方不会被替换,它们只是用作字符串。所以不存在安全问题。

您唯一可能需要担心的是当您使用eval

eval("alert(\" + someText + "\");");

(是的,我意识到这是一个人为的例子......)

于 2009-08-01T18:30:48.387 回答
4

基本上,只要您不调用“eval”(或某些调用的函数),并且不将用户创建的 Javascript 直接注入页面(通过 script 标签),您就不必担心关于。

于 2009-08-01T18:32:47.977 回答
2

一旦你在 javascript 中有一个变量,除非你用它做一个 eval 或设置一个 DOM 元素的 innerHTML 属性,否则它就没有多大关系了。

除此之外,是否存在注入的可能性取决于您如何从表单获取 javascript 的值。

例如,如果表单正在提交到服务器,并且变量的值是通过在服务器端编写 javascript 来设置的,那么您可能会遇到问题。这样的事情显然会使脚本打开以供注入。

var someText = "<?php echo $_POST["someText"]; ?>";

因此,在不知道如何从表单中获取价值的情况下,很难说是否存在安全问题。以我的经验,服务器端代码是大多数 XSS 向量的原因。就 javascript 而言,您通常只需要注意 eval 和 innerHTML。

于 2009-08-01T22:40:06.420 回答
0

如果 "someText" 是由服务器渲染的,例如 JSP、velocity, 那么它是危险的

例如

<script>
  alert({{someText}})
</script>

那么在 JavaScript 运行前,在解析 HTML 时,很危险

但是如果, “sometext” 是 javascript 变量,@Zifre 的回答是对的;

另外,除了“eval”关键字,new Function(sometext)、 location.href= sometext ......可能会引发一些攻击

于 2015-07-20T10:30:33.600 回答