包含双引号字符串的PHP和JavaScript警报

4

这是一个应该在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>

这种情况下alert的输出是:

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

在alert中输出双引号的最佳方式是什么,同时又能防止XSS注入呢?


2
addslashes(strip_tags( ... )) 应该 可以完成任务... - CD001
你可以在弹出警告之前将它放入一个div中:https://dev59.com/JG7Xa4cB1Zd3GeqPrppS#14937257 - Fels
3个回答

3

ENT_NOQUOTES 标志确保所有引号 ' 和 " 不被转义,而 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标签


这是一个不可读的输出。作者可能想要的是:带有“双引号”的输出。 - Franklin Rivero
@FranklinRivero 那么他可以使用addcslashes而不是addslashes - Roy

0

0

警告框内的所有内容都被视为字符串,不会被执行,因此只需确保它是一个单一字符串,通过转义“

”即可避免XSS攻击。

对于警告框,您无需使用htmlspecialchars,只需像这样操作:

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

2
除非字符串类似于:"); document.location('http://somekinkypornsitewithdonkeys.com'); // - CD001
很高兴你编辑了答案并加入了 addslashes ;) - CD001
是的,正在进行中,编写和测试。顺便说一句,我已经测试过了,它可以正常工作,没有XSS漏洞,能否取消投反对票? - Franklin Rivero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接