6 回答
那么,你必须:
<?php
$content = "</textarea><script>alert('hi!')</script>";
?>
<textarea>
<?php echo $content; ?>
</textarea>
如果该输出最初是由用户或任何不受信任的来源(即不是直接来自您的代码)提供的,则需要对其进行清理以防止 XSS 攻击。
您需要考虑用户是否可以编辑输出。如果不是,并且它是受信任的输出(可能来自您编写的预定义文本),您显然不会。否则是的。HTML 字符替换是很正常的,但您不必担心,因为当页面被读取并输出到用户浏览器时,所有以前的字符仍然存在。
请注意,如果不进行清理,可以使用>
and字符来注入其他 HTML 代码,特别是可以运行 Javascript 的标记。<
<script>
是的,你需要消毒。改为使用htmlspecialchars($str, ENT_QUOTES)
。
始终避免在's 内容中出现<
and >
(使用<
and >
) 。textarea
否则,可以提供以下内容(示例)来“转义”文本区域并注入 HTML 代码:
</textarea><script src="http://malicious.code.is/us.js"></script>
否则,这可能会导致以下代码:
<textarea id="text"></textarea><script src="http://malicious.code.is/us.js"></script></textarea>
最后的第二个</textarea>
将被忽略,之前的脚本标签将被执行。
仅仅使用htmlspecialchars()
是不够的。它仍然使您容易受到某些多字节字符攻击向量的攻击(即使使用htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')
也许看看像HTMLPurifier这样的库,可以为您提供更完整的解决方案。
这是 PHP 中 XSS 保护的一个很好的总结。