2010-08-13 81 views
1

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

我看,这是最好使用用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()

放回

对我来说,这是有道理的,为什么它这样做,因为如果休息已被删除,它如何知道把它放回(或做它)?

,无论如何,我在寻找一种方式,我可以保护我的形成被用来尝试和黑客网站类似形式

回答

1

你只是打印表单内容之前需要用htmlspecialchars使用JavaScript和mysql_real_escape前发布到SQL中(打印前你不需要),你应该很好。

做你的stipping标签的方式是非常危险的,你需要限制属性的允许标签的短列表 - 这不是你可以在1行中完成的。您可能想要查看HTML标准化程序,如Tidy。

+0

-1不要使用mysql_real_escape();使用参数化查询。 – 2010-08-13 16:00:29

+1

我真的没有看到使用mysql_real_escape()的危害。你的陈述有什么理由吗? – marekventur 2011-05-14 15:17:09

8

你有两个选择:

  1. 允许绝对没有HTML。使用strip_tags()允许标签或htmlspecialchars()转义可能存在的任何标签。

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

0
  • 使用HTML Purifier对HTML的输入和剥夺你不想要的一切 - 但所有段落,所有锚等

无关,但很重要:

+0

-1为什么人们不会使用参数化查询? – 2010-08-13 16:01:06