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 相关文章推荐
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
thinkphp数据查询和遍历数组实例
Nov 28 PHP
jquery+php实现导出datatables插件数据到excel的方法
Jul 06 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
php生成带logo二维码方法小结
Apr 08 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
php array_keys 返回数组的键名
Oct 25 PHP
php自定义时间转换函数示例
Dec 07 PHP
Redis在Laravel项目中的应用实例详解
Aug 11 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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
一个ftp类(ini.php)
2006/10/09 PHP
PHP的面向对象编程
2006/10/09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
php实现微信发红包
2015/12/05 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
jQuery each()小议
2010/03/18 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python的函数嵌套的使用方法
2014/01/24 Python
python批量提交沙箱问题实例
2014/10/08 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
工程业务员岗位职责
2013/12/31 职场文书
个人评价范文分享
2014/01/11 职场文书
财务总经理岗位职责
2014/02/16 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
《社戏》教学反思
2014/04/15 职场文书
三方协议书范本
2014/04/22 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
后进生评语大全
2015/01/04 职场文书