ADODB是如何完成符号转义的

本文探讨了使用ADODB库及pg_escape_string函数在PHP+PostgreSQL环境下防范SQL注入攻击的方法。介绍了ADODB的qstr函数如何配合magic_quotes_gpc进行单引号转义,并详细解释了pg_escape_string的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在研究PHP+MYSQL的 SQL注入攻击, 发现许多攻击 都是从 单引号(')开始的,

即:如果php.ini中 magic_quotes_gpc = off ,  输入内容中有 单引号(') 就可以实现关闭,从而得以注入。

但是试了一下,发现及时 magic_quotes_gpc = off  , SQL文中 输入的引号前还有一个引号,就是两个引号(''),注入也没有成功。

因为我实验的时候试的是Postgres ,一开始以为是这个原因,但是很快就排除了。

 

后来想到了我的程序中,数据库访问都用到了ADODB , 且所有的数据库访问都继承自两个通用的类,一个是管查询,一个是管动作操作(追加,更改,删除)。 于是想到是不是 ADODB  有办法来完成单引号(')转义的呢?

刚才查了下资料,看到一个老外也有这样类似的疑惑,有人回答了他,于是知道原来  ADODB 中 ADOConnection 公用函数 有个 qstr 方法 ,这个方法能够完成转义,我又查看了ADODB的手册(来自:http://www.souzz.net/online/adobd.html#qstr

)如下:

 

qstr($s,[$magic_quotes_enabled=false])

将一个字串放在引号内,以送到资料库中。$magic_quotes_enabled 叁数可能看起来很有趣,但这个想法是假设你已经用一个引号来处理了从 POST/GET 变数取来的字串後,然後以 get_magic_quotes_gpc() 做为第二个叁数。这会确定这个变数不会被引号处理二次,一次被 qstr 处理,一次被 magic_quotes_gqc

例如:  $s = $db->qstr(HTTP_GET_VARS['name'],get_magic_quotes_gpc());

回传值是一个被引号处理过的字串。

 

上面的手册说明语句有点拗口哦,但是知道了“回传值是一个被引号处理过的字串”也就够了。

这下解决了我的疑问,原来ADODB  是靠qstr 结合 magic_quotes_gpc 来转义单引号的,

我想我的项目中用来被继承的那两个通用的类里一定有关于qstr 的语句,周一上班一定再去确认一下。

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

周一来确认了一下代码, 结果发现通用的类里并没有使用 qstr  来转义 单引号(') , 而是用了 pg_escape_string

语句如: $tmpvalue_nest = pg_escape_string($tmpvalue_nest);

 

因为我们的数据库是postgres ,所以日本人用了这个 postgres 的PHP函数一样完成了转义,即在原来的 单引号(')前,再加一个单引号,变成两个单引号的形式来对数据库操作。

有没有办法设置其他的符号如:反斜杆(slash /)加在原来的单引号(')前,我还没有研究过,感觉应该可以,postgres应该会提供类似的PHP函数。

pg_escape_string  详解如下:

 

pg_escape_string
(PHP 4 >= 4.2.0, PHP 5)

pg_escape_string -- 转义 text/char 类型的字符串

说明

string pg_escape_string ( string data )

pg_escape_string() 转义 text/char 数据类型的字符串,返回转义后的字符串。建议用此函数替代 addslashes() 。

注: 本函数需要 PostgreSQL 7.2 或以上版本。

参见 pg_escape_bytea() 。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值