清理公众意见的最佳方法是什么?

时间:2009-09-10 16:23:06

标签: php mysql security

所以我有一个表单可以接受用户的一些输入,这些输入稍后可能会在页面上显示。

我从安全的角度考虑这样做的方法是获取输入,将mysql_real_escape_string()函数应用于所有输入,然后使用预准备语句插入。

检索数据时,我会先在屏幕上显示htmlspecialchars()。

这可以吗?我忽略了一些重要的事情吗?

2 个答案:

答案 0 :(得分:4)

两件事:

  • 您必须在将所有输入发送到数据库之前将其转义;为了那个原因 :
      如果您没有使用准备好的陈述,
    • mysql_real_escape_string是正确的工具
    • 如果您使用预备语句,则无需自行逃避:它将自动完成。
    • 你不能同时做到这两点:正如@longneck在他的评论中澄清的那样,如果你正在逃避自己,并使用准备好的语句,这些语句也会逃脱,你的字符串将被转义两次 - 你不想要那样。 / LI>
  • 然后,你必须逃避所有输出;如果你的输出格式是HTML,那么htmlspecialchars或htmlentities就可以了。

所以,对于HTML的输出,你正在做的事情似乎没问题;但是你输出的数据不仅仅是数据库。


作为旁注:如果您想允许用户使用HTML,您可以使用HTMLPurifier之类的工具 - 它允许您指定允许或不允许的标记/属性。

答案 1 :(得分:1)

您指出的方法是正确的,因此必须使用。是的,你缺少XSS过滤。检查此站点是否有XSS攻击示例:

http://ha.ckers.org/xss.html

所以,你最好为这种类型的黑客获得一个预防系统,比如正则表达式字符串。这是一些教程:

http://www.chipmunkninja.com/Helping-Prevent-XSS-Attacks-in-2@ http://shiflett.org/blog/2007/mar/allowing-html-and-preventing-xss