加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何防止二阶SQL攻击?

发布时间:2020-12-13 16:44:11 所属栏目:PHP教程 来源:网络整理
导读:我在任何地方都使用 PHP PDO进行查询,但我读到在非常罕见的情况下仍然可能存在“二阶注入”,其中存储了一个不安全的变量,然后在另一个语句中使用时执行. 准备好的陈述是否仍然可以防范只要我确定我一直使用它们?或者我是否需要采取更多预防措施?我还容易受
我在任何地方都使用 PHP PDO进行查询,但我读到在非常罕见的情况下仍然可能存在“二阶注入”,其中存储了一个不安全的变量,然后在另一个语句中使用时执行.

准备好的陈述是否仍然可以防范只要我确定我一直使用它们?或者我是否需要采取更多预防措施?我还容易受到XSS攻击吗?

如果你们都不介意的话,我还有一些问题,只是出于好奇.

>是否可以使用仅包含字母数字字符,空格和短划线的SQL注入?喜欢select * from name =’$some_variable’.我见过的所有例子似乎都需要其他字符,如分号,引号或双短划线.
>我已经阅读了许多SQL示例,其中可以将unsafe变量设置为形成另一个语句,例如

$foo = "foo'); INSERT INTO users (name) VALUES ('hi";
$bar = ("INSERT INTO users (name) VALUES ('$foo')");

但我刚刚测试过,mysql_query甚至不允许多个语句.我知道您仍然可以在1个语句中进行注射,但是我可以确认您在PHP中没有多个语句的问题吗?

解决方法

不是为了打死(或者它是一个非常活着的?)马,但……

注入只能在SQL引擎作为命令读取数据时发生.在一个非常简单的情况下,如果您在数据中允许未转义的“字符,并且您的数据由SQL中的字符封装”,则表明您已启用SQL注入攻击.

防止任何SQL注入的关键是在进入SQL语句时正确地验证和转义传入数据.一种简单的方法是使用预处理的语句,为您处理它,允许您安全地将参数传递给SQL语句.

每个数据库库都有自己的转义或使用预准备语句的方式.在MySQL和PHP中,当你使用mysqli库时,你有mysqli_real_escape_string(),它应该在每个时间段使用.

PDO库有它自己的方式,但如果我没记错的话,准备好的语句是PDO的重要组成部分 – 100%的时间使用它们,你就可以了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读