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 相关文章推荐
其他功能
Oct 09 PHP
PHP文件下载类
Dec 06 PHP
mysql时区问题
Mar 26 PHP
php中几种常见安全设置详解
Apr 06 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
php实现Session存储到Redis
Nov 11 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
PHP创建单例后台进程的方法示例
May 23 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
laravel返回统一格式错误码问题
Nov 04 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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP分页类集锦
2014/11/18 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
vue实现购物车案例
2020/05/30 Javascript
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
带你了解python装饰器
2017/06/15 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
PyQt5实现简单的计算器
2020/05/30 Python
请说出几个常用的异常类
2013/01/08 面试题
局域网标准
2016/09/10 面试题
运动会通讯稿200字
2014/02/16 职场文书
小学端午节活动方案
2014/03/13 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
社区端午节活动总结
2015/02/11 职场文书
中小企业员工手册范本
2015/05/14 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
创业计划书之农家乐
2019/10/09 职场文书