如何保证表格?

时间:2010-08-13 15:31:21

标签: php htmlspecialchars html-entities strip-tags

我正在阅读一篇关于表单安全性的文章,因为我有一个表单,用户可以在其中添加消息。

我读到最好使用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一样。

3 个答案:

答案 0 :(得分:9)

您有两个选择:

  1. 绝对不允许HTML。将strip_tags()允许的标记一起使用,或htmlspecialchars()转义可能存在的任何标记。

  2. 允许HTML,但您需要清理HTML。这是 NOT 您可以使用strip_tags执行的操作。使用库(例如HTMLPurifier)...

答案 1 :(得分:0)

在打印表单内容之前只需要htmlspecialchars,在发布到SQL之前需要mysql_real_escape(在打印之前不需要它),你应该很好。

采用自动方式标记标签是非常危险的,您需要具有有限属性的允许标签的简短列表 - 这不是您可以在一行中执行的操作。您可能希望查看HTML规范化器,例如Tidy。

答案 2 :(得分:-1)

  • 使用HTML Purifier进行html输入并删除你不想要的所有内容 - 除了段落,所有锚点等等。

无关但重要: