首页 / 知识

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

2023-04-14 09:41:00

关于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设置,并且一旦使用这两种解决方案之一编写了很多代码,就需要花费很多时间。努力换成另一个。


    转义应用程序输入初始化

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢