关于php:如何防止在LAMP应用程序中进行SQL注入?

关于php:如何防止在LAMP应用程序中进行SQL注入?

How do you prevent SQL injection in LAMP applications?

以下是开始对话的几种可能性:

  • 初始化后转义所有输入。
  • 转义每个值,最好在生成SQL时转义。
  • 第一个解决方案是次优的,因为如果要在SQL之外的其他任何情况下使用每个值,则需要取消转义每个值,例如在网页上输出。

    第二种解决方法更有意义,但是手动转义每个值是一个痛苦。

    我知道准备好的语句,但是我发现MySQLi很麻烦。另外,将查询与输入分离也令我感到担忧,因为尽管正确执行订单至关重要,但很容易犯错,从而将错误的数据写入错误的字段。


    准备好的陈述是最好的答案。您进行测试是因为您可能会犯错误!

    请参阅此问题。


    正如@Rob Walker所说,参数化查询是最好的选择。如果您使用的是最新最好的PHP,则强烈建议您看一下PDO(PHP数据对象)。这是一个本机数据库抽象库,它支持各种数据库(当然包括MySQL)以及带有命名参数的准备好的语句。


    我会使用准备好的语句。如果要使用准备好的语句,则可能要签出PHP的PDO函数。这不仅使您可以轻松地运行准备好的语句,而且还可以通过不调用以mysql_,mysqli_或pgsql_开头的函数来使数据库更加不可知。


    PDO总有一天值得,但不仅如此。它是一种DBAL,(据说)它的优势是使供应商之间的切换更加容易。它并不是真正能够捕获SQL注入的对象。

    无论如何,您希望转义和清理输入,使用准备好的语句可能是一个不错的选择(我赞成)。虽然我相信这要容易得多,例如通过使用过滤器。


    我一直使用第一个解决方案,因为在99%的时间里,$_GET$_POST$_COOKIE中的变量从不输出到浏览器。您也永远不会用SQL注入错误地编写代码(除非您在查询中不使用引号),而使用第二种解决方案,您很容易忘记最终会转义其中一个字符串。

    实际上,我之所以一直这样做是因为我的所有站点默认情况下都启用了magic_quotes设置,并且一旦使用这两种解决方案之一编写了很多代码,就需要花费很多时间。努力换成另一个。


    推荐阅读

      linux命令行不能输入?

      linux命令行不能输入?,工作,系统,电脑,服务,命令,名字,首次,百度,管理,第一,l

      linux打命令输入密码?

      linux打命令输入密码?,密码,系统,状态,代码,管理,标的,位置,地址,名称,命令,L

      linux输入命令后乱码?

      linux输入命令后乱码?,系统,乱码,中文,情况,环境,地方,名称,字符集,服务器,

      linux输入命令无反应?

      linux输入命令无反应?,密码,系统,数据,命令,工具,时报,信息,检测,文件,反应,L

      linux命令行输入引号?

      linux命令行输入引号?,系统,密码,命令,电脑,标准,地方,环境,管理,名字,表示,

      怎么输入linux命令?

      怎么输入linux命令?,系统,工具,命令,电脑,工作,终端,数字,时间,软件,分行,lin

      linux输入命令删除键?

      linux输入命令删除键?,名称,系统,档案,命令,文件,目录,不了,数据,文件夹,终

      linux多个命令输入?

      linux多个命令输入?,系统,工具,工作,命令,电脑,地址,信息,软件,服务,连续,Lin

      linux命令重复输入?

      linux命令重复输入?,软件,信息,状态,标的,工具,系统,命令,终端,模式,编辑,在l

      linux命令空格转义?

      linux命令空格转义?,系统,密码,名称,管理,数据,标准,电脑,空格,命令,终端,lin

      linux初始化硬盘命令?

      linux初始化硬盘命令?,系统,工作,设备,工具,信息,基础,地址,电脑,命令,数据,l

      linux连续输入命令?

      linux连续输入命令?,系统,工作,地址,连续,命令,信息,电脑,基础,标准,状态,lin

      linux命令行重复输入?

      linux命令行重复输入?,地址,工作,系统,信息,命令,目录,服务,管理,标准,电脑,l

      linux命令输入提示?

      linux命令输入提示?,地址,系统,工作,命令,分析,网站,环境,异常,信息,电脑,lin

      linux命令从哪里输入?

      linux命令从哪里输入?,系统,位置,地址,电脑,命令,终端,信息,情况,首开,管理,l

      linux出命令无法输入?

      linux出命令无法输入?,工具,密码,数字,项目,下来,电脑,状态,不了,命令,小键

      linux重定向命令输入?

      linux重定向命令输入?,标准,设备,文件,命令,位置,信息,系统,人员,基础知识,

      linux命令从哪输入?

      linux命令从哪输入?,系统,工具,地址,终端,命令,管理,分行,首页,位置,发行,lin

      linux基本命令的输入?

      linux基本命令的输入?,地址,工作,系统,命令,信息,管理,目录,工具,电脑,网站,l

      linux输入命令规则?

      linux输入命令规则?,工作,地址,标准,系统,信息,命令,基础,不了,情况,环境,lin