2009-09-10 80 views
3

所以我有一个表单接受来自用户的一些输入,可能以后在页面上表示。清理公众意见的最佳方式是什么?

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

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

这会好吗?我是否忽略了重要的事情?

回答

4

两件事情:

  • 您必须将其发送到数据库之前,逃避所有的输入;为:
    • mysql_real_escape_string是正确的工具,如果你不使用准备好的语句
    • 如果你正在使用预处理语句,你并不需要自己逃脱,它会自动完成。
    • 但是你不能这样做:正如@longneck在他的评论中澄清的那样,如果你正在逃避自己,并且使用准备好的语句,它们也会转义,你的字符串会被转义两次 - 而你不想这样做。
  • 然后,你必须逃避所有输出;如果你的输出格式是HTML,htmlspecialchars或htmlentities都可以。

所以,你对我的输出HTML似乎没问题;但是您对输出到数据库的操作要做得多。作为一个旁注:如果你想允许你的用户使用HTML,你可以使用像HTMLPurifier这样的工具 - 它允许你指定允许或不允许哪些标签/属性。

+0

只是为了澄清:你应该要么mysql_real_escape_string(),或使用准备好的语句。如果您同时执行这两个操作,则字符串将被双重转义,并且在发送给客户端之前必须进行预处理。 – longneck 2009-09-10 16:31:45

+0

@longneck:我已经编辑过坚持你说的话;谢谢 :-) – 2009-09-10 16:35:35

相关问题