Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 清理公众投入的最佳方式是什么?_Php_Mysql_Security - Fatal编程技术网

Php 清理公众投入的最佳方式是什么?

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()函数,然后使用准备好的语句插入

在检索数据时,我将在屏幕上显示之前对其执行htmlspecialchars()

这样行吗?我是否忽略了重要的事情?

两件事:

  • 您必须先转义所有输入,然后再将其发送到数据库;为此:
    • mysql\u real\u escape\u string
      是正确的工具,如果您没有使用准备好的语句
    • 如果您使用的是预先准备好的语句,您不需要自己逃避:它将自动完成
    • 但是,您不能同时做这两件事:正如@longneck在他的评论中所阐明的,如果您是在转义自己,并且使用准备好的语句(也转义),那么您的字符串将转义两次——您不希望这样
  • 然后,您必须退出所有输出;如果您的输出格式是HTML,则htmlspecialchars或htmlentities可以
所以,对于输出到HTML,您所做的对我来说似乎没问题;但是,您所做的超出了输出到DB所需的范围



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

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

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


只是想澄清一下:您应该执行mysql\u real\u escape\u string()或使用准备好的语句。如果同时执行这两种操作,则字符串将被双重转义,并且在发送到客户端之前必须进行预处理。@longneck:我已编辑以坚持您所说的内容;谢谢:-)