mysql pdo原理_从宽字节注入认识PDO的原理和正确使用

本文探讨了PHP的PDO(PHP Data Objects)在防止SQL注入中的作用和潜在风险。虽然PDO通常被认为是防止SQL注入的有效方式,但错误的使用可能导致安全问题,如宽字节注入。PDO的默认设置允许多句执行和模拟预编译,这在参数可控时可引发堆叠注入。通过调整PDO的属性,如关闭模拟预编译和多句执行,可以增强安全性。同时,文章提到即使没有可控参数,某些情况下也可能发生union注入。正确的PDO配置和理解其预编译原理是防止SQL注入的关键。
摘要由CSDN通过智能技术生成

原标题:从宽字节注入认识PDO的原理和正确使用

前言

随着数据库参数化查询的方式越来越普遍,SQL注入漏洞较之于以前也大大减少,而PDO作为php中最典型的预编译查询方式,使用越来越广泛。

众所周知,PDO是php中防止SQL注入最好的方式,但并不是100%杜绝SQL注入的方式,关键还要看如何使用。

之前在一篇文章中了解到PDO场景下参数可控导致的多句执行等问题(https://xz.aliyun.com/t/3950)于是对PDO场景下的SQL注入又进行了一些探究。

PDO查询语句可控存在的安全问题:

首先在本地新建一个库和表,随便写点东西。

8cb7870712c6e3785e6849b5da8759cc.png

然后写一个test.php,用PDO进行简单的查询:

getMessage; } if(isset($_GET['id'])) { $id = $_GET['id']; } else { $id=1; } $query = "select balabala from table1 where 1=?"; echo "id:".$id."

"; $row = $db->prepare($query); $row->bindParam(1,$id); $row->execute; $result = $row->fetch(PDO::FETCH_ASSOC); if($result) { echo "结果为:"; print_r($result); echo "

"; }

将输入的内容和得到的结果打印在页面上:

e13a4b00545e17870ae1568d0a1c2198.png

PDO与安全问题相关的主要的设置有下面三个:

PDO::ATTR_EMULATE_PREPARES

PDO::ATTR_ERRMODE

PDO::MYSQL_ATTR_MULTI_STATEMENTS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值