Php 清理公众投入的最佳方式是什么?
因此,我有一个表单,它接受用户的一些输入,这些输入稍后可能会显示在页面上 从安全角度来看,我这样做的方式是接受输入,对所有输入应用mysql\u real\u escape\u string()函数,然后使用准备好的语句插入 在检索数据时,我将在屏幕上显示之前对其执行htmlspecialchars() 这样行吗?我是否忽略了重要的事情?两件事:Php 清理公众投入的最佳方式是什么?,php,mysql,security,Php,Mysql,Security,因此,我有一个表单,它接受用户的一些输入,这些输入稍后可能会显示在页面上 从安全角度来看,我这样做的方式是接受输入,对所有输入应用mysql\u real\u escape\u string()函数,然后使用准备好的语句插入 在检索数据时,我将在屏幕上显示之前对其执行htmlspecialchars() 这样行吗?我是否忽略了重要的事情?两件事: 您必须先转义所有输入,然后再将其发送到数据库;为此: mysql\u real\u escape\u string是正确的工具,如果您没有使用准备
- 您必须先转义所有输入,然后再将其发送到数据库;为此:
是正确的工具,如果您没有使用准备好的语句mysql\u real\u escape\u string
- 如果您使用的是预先准备好的语句,您不需要自己逃避:它将自动完成
- 但是,您不能同时做这两件事:正如@longneck在他的评论中所阐明的,如果您是在转义自己,并且使用准备好的语句(也转义),那么您的字符串将转义两次——您不希望这样
- 然后,您必须退出所有输出;如果您的输出格式是HTML,则htmlspecialchars或htmlentities可以
旁注:如果你想让你的用户使用HTML,你可以使用像HTMLPurifier这样的工具——它允许你指定哪些标记/属性是允许的或不允许的。你指出的方法是正确的,因此必须使用。是的,您缺少的XSS过滤。检查此站点以了解XSS攻击示例: 所以,你最好为这类黑客建立一个预防系统,比如正则表达式字符串。以下是一些教程:
只是想澄清一下:您应该执行mysql\u real\u escape\u string()或使用准备好的语句。如果同时执行这两种操作,则字符串将被双重转义,并且在发送到客户端之前必须进行预处理。@longneck:我已编辑以坚持您所说的内容;谢谢:-)