所以我有一个表单接受来自用户的一些输入,可能以后在页面上表示。清理公众意见的最佳方式是什么?
从安全的角度来看,我想这样做的方式是接受输入,将mysql_real_escape_string()函数应用于所有输入,然后使用预准备语句插入。
检索数据时,我会先在屏幕上显示htmlspecialchars()。
这会好吗?我是否忽略了重要的事情?
所以我有一个表单接受来自用户的一些输入,可能以后在页面上表示。清理公众意见的最佳方式是什么?
从安全的角度来看,我想这样做的方式是接受输入,将mysql_real_escape_string()函数应用于所有输入,然后使用预准备语句插入。
检索数据时,我会先在屏幕上显示htmlspecialchars()。
这会好吗?我是否忽略了重要的事情?
两件事情:
mysql_real_escape_string
是正确的工具,如果你不使用准备好的语句所以,你对我的输出HTML似乎没问题;但是您对输出到数据库的操作要做得多。作为一个旁注:如果你想允许你的用户使用HTML,你可以使用像HTMLPurifier这样的工具 - 它允许你指定允许或不允许哪些标签/属性。
您指出的方法是正确的,因此必须使用。是的,你错过了XSS Filtering。检查这个网站的XSS攻击的例子:
所以,你最好找一个防御系统这种类型的黑客,像一个正则表达式的字符串。下面是一些教程:
http://www.chipmunkninja.com/[email protected] http://shiflett.org/blog/2007/mar/allowing-html-and-preventing-xss
只是为了澄清:你应该要么mysql_real_escape_string(),或使用准备好的语句。如果您同时执行这两个操作,则字符串将被双重转义,并且在发送给客户端之前必须进行预处理。 – longneck 2009-09-10 16:31:45
@longneck:我已经编辑过坚持你说的话;谢谢 :-) – 2009-09-10 16:35:35