代码之家  ›  专栏  ›  技术社区  ›  Evernoob

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

  •  3
  • Evernoob  · 技术社区  · 17 年前

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

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

    在检索数据时,我将先对其执行htmlspecialchars(),然后再将其显示在屏幕上。

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

    2 回复  |  直到 17 年前
        1
  •  4
  •   Pascal MARTIN    17 年前

    两件事:

    • 在将所有输入发送到数据库之前,必须对其进行转义;为此:
      • mysql_real_escape_string 是正确的工具,如果您不使用准备好的语句
      • 如果您使用的是准备好的语句,则不需要自己进行转义:它将自动完成。
      • 不过,您不能同时这样做:正如@longneck在他的评论中所阐明的那样,如果您在逃避自己,并且使用准备好的语句,这些语句也会被逃避,那么您的字符串将被两次逃避——您不希望这样做。
    • 然后,必须转义所有输出;如果输出格式为html,则htmlspecialchars或htmlentities正常。

    所以,对于输出到HTML,我认为您所做的似乎是正常的;但是对于输出到DB,您所做的比必需的要多。


    旁注:如果你想允许你的用户使用HTML,你可以使用像html净化器这样的工具——它允许你指定哪些标签/属性是允许的或不允许的。

        2
  •  1
  •   yoda    17 年前

    您指出的方法是正确的,因此必须使用。是的,您丢失的XSS过滤。检查此站点以了解XSS攻击示例:

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

    所以,您最好为这种类型的黑客提供一个预防系统,比如regex字符串。以下是一些教程:

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