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 相关文章推荐
php 使用post,get的一种简洁方式
Apr 25 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
php中Smarty模板初体验
Aug 08 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
php字符集转换
Jan 23 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
PHP实现微信退款功能
Oct 02 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
js转html实体的方法
2016/09/27 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
法学院方阵解说词
2014/01/29 职场文书
会计专业求职信范文
2014/03/16 职场文书
入党团支部推荐意见
2015/06/02 职场文书
婚礼父母致辞
2015/07/28 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript