亚森罗宾 -- 悟透人生

人生在世 虚幻无数 悟透人生 洒脱于世

歪酷博客
· 所有网志 · 技术天地 · 摄影小记 · 新闻学手记 · 随谈随笔 ·
订阅博客
订阅我的博客
订阅到Google
订阅到抓虾
订阅到鲜果
日历
站内搜索
友情链接
· 歪酷博客
· 管理我的Blog
· 我的豆瓣
· 我在巴巴变的相册
· Google 黑板报
· Daniel 我远在澳洲的兄弟
· 一个当警察的大学同学
· TTST
· xixi
· smokingcat
· Litrin
· David
· 仙姑
· wendy
· 蔷薇岛屿
· 朵朵缤纷
· 小鸡安息
· myard
· 小昳
· SadieaLupin

订阅 RSS

0033202

歪酷博客

« 上一篇: 一首在一个法国人的论坛中看到的中国人写的诗 下一篇: Torch relay in Canberra »
亚森罗宾 @ 2008-04-28 17:22

以前一直是在PHP与MySQL环境下开发的,对于PHP+MySQL注入还是比较了解
一般会采用以下两个方法中任意一个来防范SQl Injection(不要两个方法同时用)
方法一:将php.ini文件里的magic_quotes_gpc设成了on
方法二:使用php的addslashes()函数来解决问题
通过上面的方法,就可以将 ' (单引号)," (双引号), \ (反斜杠) 和 空字符等特殊字符自动转为含有反斜杠的转义字符。例如把 '  变成了\',把\变成了\。这样就可以成为MySQL数据库可以接受的字符。

但如果是Oracle数据库情况又是怎么样呢?
在Oracle数据库中' (单引号),也被认为是特殊字符。但是Oracle中却要把' (单引号)转成''(两个单引号)。
这也就是说 ' (单引号)," (双引号),\ (反斜杠) 等特殊字符在MySQL与Oracle的SQL语句中是完全不一样的。

从下面我们可以看出,我们输入的变量、采用的方法与MySQL与Oracle SQL语句需要的之间的差别
输入变量 方法一 方法二 方法一+方法二 MySQL SQL语句需要的 Oracle SQL语句需要的
'(单引号) \' \' \' \' ''(两个单引号)
"(双引号) \" \" \" \" "
\ (反斜杠) \ \ \ \ \

在这里介绍一种通用的处理PHP SQL Injection的方法
在PHP6中,magic_quotes_gpc将被移除,系统不会默任将接受到的参数转义。
而且addslashes()函数转义过的特殊字符却并不符合Oracle的SQL语句的要求。
在这种情况下,PEAR类库 MDB2 中的 escape() 方法会是一个不错的选择。
escape()方法可以根据数据库类型的不同,将特殊字符转成各种数据库适合的字符。

详细的使用方法,请查看 http://pear.php.net/






评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定