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


php & javascript alert that contains a string with double quote

这是我应该在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注入的最佳方式是什么?

ENT_NOQUOTES标志确保所有引号"answers"都不会转义,并且addslashes会为js alert函数转义它们。

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

输出:

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

保留您的报价并逃离恶意html标签

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

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

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

警报中的所有内容都被视为字符串,不会被执行,因此如果您只是通过逃离""来确保它是单个字符串,则不会受到XSS攻击

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

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