2

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

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

4

3 回答 3

9

您有 2 个选择:

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

  2. 允许 HTML,但您需要清理 HTML。这不是你可以做的strip_tags。使用库(例如HTMLPurifier)...

于 2010-08-13T15:39:26.677 回答
0

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

以您的方式添加标签是非常危险的,您需要具有有限属性的允许标签的简短列表 - 这不是您可以在 1 行中执行的操作。您可能想要研究 HTML 规范化器,例如 Tidy。

于 2010-08-13T15:36:05.513 回答
-1
  • 使用HTML Purifier进行 html 输入并删除您不想要的所有内容 - 除了段落、所有锚点等之外的所有内容。

无关但重要的:

于 2010-08-13T15:46:52.367 回答