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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
php使浏览器直接下载pdf文件的方法
Nov 15 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
详解Laravel制作API接口
May 31 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循环跳出的问题
2013/07/01 PHP
php 地区分类排序算法
2013/07/01 PHP
PHP中文编码小技巧
2014/12/25 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
基于jQuery实现表单提交验证
2014/11/24 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
python学习手册中的python多态示例代码
2014/01/21 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Django中的ajax请求
2018/10/19 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Python绘图实现显示中文
2019/12/04 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
运动会广播稿60字
2014/01/15 职场文书
社区服务标语
2014/07/01 职场文书
婚前协议书标准版
2014/10/19 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
体育教师个人总结
2015/02/09 职场文书
老龙头导游词
2015/02/11 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
庆七一活动简报
2015/07/20 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL