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生成随机密码的三种方法小结
Sep 04 PHP
解析php入库和出库
Jun 25 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
PHP7多线程搭建教程
Apr 21 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 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
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
使用jQuery实现返回顶部
2015/01/26 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
详解nodejs模板引擎制作
2017/06/14 NodeJs
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
使用jquery实现轮播图效果
2021/01/02 jQuery
Python检查ping终端的方法
2019/01/26 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
python无序链表删除重复项的方法
2020/01/17 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
python时间time模块处理大全
2020/10/25 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
赔偿协议书范本
2014/04/15 职场文书
安全横幅标语
2014/06/09 职场文书
物资采购方案
2014/06/12 职场文书
如何写股份合作协议书
2014/09/11 职场文书
质量主管工作职责
2014/09/26 职场文书
护理见习报告范文
2014/11/03 职场文书
小学教师年度个人总结
2015/02/05 职场文书
教师个人自我评价
2015/03/04 职场文书
借条如何写
2015/05/26 职场文书
日元符号 ¥
2022/02/17 杂记
关于的python五子棋的算法
2022/05/02 Python