需要转义或清理<textarea>?</textarea>中显示的输出

时间:2012-11-14 00:46:26

标签: php html textarea

您是否必须逃避或清理<textarea>中的输出?

似乎如果我使用htmlentities()来清理真实的&amp; ...;角色替换出现

6 个答案:

答案 0 :(得分:2)

嗯,你必须:

<?php
$content = "</textarea><script>alert('hi!')</script>";
?>

<textarea>
<?php echo $content; ?>
</textarea>

enter image description here

答案 1 :(得分:1)

如果该输出最初由用户或任何不受信任的来源提供(即不直接来自您的代码),则需要对其进行清理以防止XSS攻击。

答案 2 :(得分:1)

您需要考虑用户是否可以编辑输出。如果不是,它是一个可靠的输出(可能来自你写的预定义文本),你显然不会。否则是的。 HTML字符替换是很正常的,但您不必担心,因为当页面被读取并输出到用户浏览器时,所有以前的字符仍将存在。

请注意,><字符可用于注入其他HTML代码,特别是可以运行Javascript的<script>标记,如果不是清理的话。

答案 3 :(得分:1)

是的,你需要消毒。请改用htmlspecialchars($str, ENT_QUOTES)

答案 4 :(得分:1)

始终在<的内容中逃避>&lt;&gt;textarea)的所有出现。否则,可以提供以下内容(示例)来“转义”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>将被忽略,之前的脚本标记将被执行。

答案 5 :(得分:0)

仅使用htmlspecialchars()是不够的。它仍然容易受到某些多字节字符攻击向量的攻击(即使使用htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')

或许查看像HTMLPurifier这样的库,为您提供更完整的解决方案。

以下是PHP中XSS保护的一个很好的总结。

http://www.bytetouch.com/blog/programming/protecting-php-scripts-from-cross-site-scripting-xss-attacks/