htmlspecialchars是否可以转义javascript?

时间:2011-10-10 20:42:12

标签: php escaping

我偶然发现了这个问题:

你们知道htmlspecialchars函数是否也从用户输入中逃脱了javaScript?

谢谢

4 个答案:

答案 0 :(得分:4)

嗯,回答你的问题,这取决于。如果你在做:

<p><?php echo htmlspecialchars($userInput); ?></p>

然后他们将无法将脚本注入您的应用程序。

<强>无论其

如果你想这样做:

<script>
    var foo = '<?php echo htmlspecialchars($userInput); ?>';
</script>

安全。请参阅OWASP's XSS Cheat Sheet上的规则#3。

为了保护它,您需要使用JS感知转义函数。如果你只需要一个字符串文字,你可以对它进行json编码,但是我会使用ESAPI来处理PHP。

答案 1 :(得分:2)

根据manual,以下字符被替换:

  
      
  • '&'(&符号)变为'&amp;'
  •   未设置'"'时,
  • '&quot;'(双引号)变为ENT_NOQUOTES
  •   
  • "'"(单引号)仅在'&#039;'设置时变为ENT_QUOTES
  •   
  • '<'(小于)变为'&lt;'
  •   
  • '>'(大于)变为'&gt;'
  •   

因此会修改<script>标记,但内部的Javascript可能会也可能不会被修改,具体取决于它包含的字符。

答案 2 :(得分:2)

PHP manual确切地告诉您该功能改变了哪些字符。

它不关心你给它的字符串是否包含HTML或JS或其他东西。它只是在你给它的任何字符串上进行翻译。

由于HTML和JS使用不同的转义字符,因此它可以使任意数据在HTML中“安全”使用,其中包括使某些JS可以安全地用于HTML。

e.g。

$js = "if (foo && bar) { return false; }"
echo "<button onclick='" . htmlspecialchars($js) . "'>click</button>"

将输出:

<button onclick='if (foo &amp;&amp; bar) { return false; }'>click</button>

因此,防止HTML中&的特殊含义破坏了脚本。

但是,在JavaScript中使用它不会使字符串安全,因为它不会触及\等具有特殊含义的字符。

答案 3 :(得分:0)

确实如此。 <script>已更改为&lt;script&gt;