Javascript安全问题

时间:2009-08-01 18:29:31

标签: javascript security code-injection

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

alert(someText);

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

  

“anotherText”); alert(“the nextText”

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

4 个答案:

答案 0 :(得分:7)

不,它不起作用。字符串值在使用它们时不会被替换,它们只是用作字符串。所以没有安全问题。

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

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

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

答案 1 :(得分:4)

基本上,只要你没有调用“eval”(或某些功能),并且你没有直接将用户创建的Javascript注入页面(通过脚本标签),你就不应该什么都要担心。

答案 2 :(得分:2)

一旦你在javascript中有一个变量,除非你做一个eval或者用它设置DOM元素的innerHTML属性,否则它将无关紧要。

除此之外,是否有可能注入取决于你如何从表单获取值到javascript。

例如,如果表单正在提交给服务器,并且通过在服务器端编写javascript来设置变量的值,则可能会出现问题。 这样的事情显然会让脚本开放注射。

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

因此,如果不知道如何从表单中获取值,很难说是否存在安全问题。根据我的经验,服务器端代码是大多数XSS向量的原因。在javascript方面,你通常只需要注意eval和innerHTML。

答案 3 :(得分:0)

if&#34; someText&#34;由服务器呈现,例如JSP,velocity,然后它是危险的

例如

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

然后在JavaScript运行时,在HTML解析时,它是危险的

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

旁边,除了&#34; eval&#34;关键字,新函数(sometext),location.href = sometext ......可能会调用一些攻击