我正在阅读一篇关于表单安全性的文章,因为我有一个表单,用户可以在其中添加消息。
我读到最好使用strip_tags()
,htmlspecialchars()
和nl2br()
。据说其他地方使用html_entity_decode()
。
我在我的页面中有这个代码,它接受用户输入
<?php
$topicmessage = check_input($_POST['message']); //protect against SQLinjection
$topicmessage = strip_tags($topicmessage, "<p><a><span>");
$topicmessage = htmlspecialchars($topicmessage);
$topicmessage = nl2br($topicmessage);
?>
但是当我回复消息时,它全部在一行上,并且strip_tags
似乎已删除了中断,而nl2br()
没有放回。
对我而言,为什么会这样做是有道理的,因为如果中断被删除,它如何知道将它放回去(或者它是什么)?
无论如何,我正在寻找一种方法,我可以保护我的表单,用于尝试破解网站,就像在表单中使用javascript一样。
答案 0 :(得分:9)
您有两个选择:
绝对不允许HTML。将strip_tags()
与否允许的标记一起使用,或htmlspecialchars()
转义可能存在的任何标记。
允许HTML,但您需要清理HTML。这是 NOT 您可以使用strip_tags
执行的操作。使用库(例如HTMLPurifier)...
答案 1 :(得分:0)
在打印表单内容之前只需要htmlspecialchars,在发布到SQL之前需要mysql_real_escape(在打印之前不需要它),你应该很好。
采用自动方式标记标签是非常危险的,您需要具有有限属性的允许标签的简短列表 - 这不是您可以在一行中执行的操作。您可能希望查看HTML规范化器,例如Tidy。
答案 2 :(得分:-1)
无关但重要: