PHP与SQL注入攻击[二]


Posted in PHP onApril 17, 2007

PHP与SQL注入攻击[二]

Magic Quotes

上文提到,SQL注入主要是提交不安全的数据给数据库来达到攻击目的。为了防止SQL注
入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全
上的初步处理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc
选项启用,那么输入的字符串中的单引号,双引号和其它一些字符前将会被自动加上反斜杠\。

但Magic Quotes并不是一个很通用的解决方案,没能屏蔽所有有潜在危险的字符,并且在许
多服务器上Magic Quotes并没有被启用。所以,我们还需要使用其它多种方法来防止SQL注
入。

许多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有一个叫mysql_real_escape_string()的函数,可将特殊字符和可能引起数据库操作出错的字符转义。

参考:
http://cn2.php.net/mysql_real_escape_string
有兴趣可以看看下面的评论:)

看这段代码:

//如果Magic Quotes功用启用
if (get_magic_quotes_gpc()) {
$name = stripslashes($name);
}else{
$name = mysql_real_escape_string($name);
}

mysql_query(“SELECT * FROM users WHERE name='{$name}'”);

注意,在我们使用数据库所带的功能之前要判断一下Magic Quotes是否打开,就像上例
中那样,否则两次重复处理就会出错。如果MQ已启用,我们要把加上的\去掉才得到真实
数据。

除了对以上字符串形式的数据进行预处理之外,储存Binary数据到数据库中时,也要注
意进行预处理。否则数据可能与数据库自身的存储格式相冲突,引起数据库崩溃,数据
记录丢失,甚至丢失整个库的数据。有些数据库如PostgreSQL,提供一个专门用来编码
二进制数据的函数pg_escape_bytea(),它可以对数据进行类似于Base64那样的编码。

如:
// for plain-text data use:
pg_escape_string($regular_strings);

// for binary data use:
pg_escape_bytea($binary_data);

另一种情况下,我们也要采用这样的机制。那就是数据库系统本身不支持的多字节语言
如中文,日语等。其中有些的ASCII范围和二进制数据的范围重叠。
不过对数据进行编码将有可能导致像LIKE abc% 这样的查询语句失效。

PHP 相关文章推荐
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
php的dl函数用法实例
Nov 06 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
php实现通过ftp上传文件
Jun 19 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
PHP实现用户登录的案例代码
May 10 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
PHP7创建销毁session的实例方法
Feb 03 PHP
PHP与SQL注入攻击[一]
Apr 17 #PHP
使用Xdebug调试和优化PHP程序之[1]
Apr 17 #PHP
php下用GD生成生成缩略图的两个选择和区别
Apr 17 #PHP
15种PHP Encoder的比较
Apr 17 #PHP
dede全站URL静态化改造[070414更正]
Apr 17 #PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 #PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 #PHP
You might like
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
layui导航栏实现代码
2017/05/19 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Django 反向生成url实例详解
2019/07/30 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
Python求凸包及多边形面积教程
2020/04/12 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
shell的种类有哪些
2015/04/15 面试题
公务员总结性个人自我评价
2013/12/05 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
产品促销活动策划书
2014/01/15 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
2015学校年度工作总结
2015/05/11 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
Python集合set()使用的方法详解
2022/03/18 Python