php&包含带双引号的字符串的javascript警报

时间:2016-08-22 13:07:38

标签: javascript php string xss quotes

这是我应该在javascript alert();

中输出的字符串示例

string with "double quote" in it

因为我的用户可以通过PHP编辑这个字符串,所以防止XSS攻击会更好。为了在我的文档的HTML中这样做,我通常会这样做:

<?php echo( htmlspecialchars( $MY_STRING, ENT_QUOTES, 'UTF-8' ) ); ?>

这很有效。

但现在我注意到如果我在javascript警告中输出相同的字符串:

<script>
alert( "<?php echo( htmlspecialchars( $MY_STRING, ENT_QUOTES, 'UTF-8' ) ); ?>" );
</script>

在这种情况下警报的输出是:

string with &quot;double quote&quot; in it

在警报中输出双引号的最佳方法是什么,还有预防XSS注射?

3 个答案:

答案 0 :(得分:3)

ENT_NOQUOTES标志确保所有引号'和'都不会被转义,而addslashes会为js警报功能转义它们。

$string = 'string<< with "double quote" in it';
echo htmlentities(addslashes($string), ENT_NOQUOTES);

输出:

string&lt;&lt; with \"double quote\" in it

保留你的报价并逃脱恶意的html标签

答案 1 :(得分:0)

alert( "<?php echo( addslashes( $MY_STRING ) ); ?>" );

使用addslashes() rahter而不是htmlspecialchars()或两者结合使用。希望它有所帮助。

addslashes() http://php.net/manual/en/function.addslashes.php

答案 2 :(得分:0)

警报内的所有内容都被视为一个字符串,不会被执行,所以如果你只是通过逃避“

来确保它是一个单一字符串,你就不会受到XSS攻击

对于您不需要使用htmlspecialchars的警报,您可以这样做:

<script>
    alert( "<?php echo addslashes($MY_STRING);  ?>" );
 </script>