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 25 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
redis 队列操作的例子(php)
Apr 12 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php简单图像创建入门实例
Jun 10 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
PHP implode()函数用法讲解
Mar 08 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 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批量生成随机用户名
2008/07/10 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
php中请求url的五种方法总结
2017/07/13 PHP
jQuery的强大选择器小结
2009/12/27 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
详解python statistics模块及函数用法
2019/10/27 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
详解Django中异步任务之django-celery
2020/11/05 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
行政副总岗位职责
2014/02/23 职场文书
初中家长寄语
2014/04/02 职场文书
2014年班组长工作总结
2014/11/20 职场文书
2014年教务工作总结
2014/12/03 职场文书
会计简历自我评价
2015/03/10 职场文书
十二生肖观后感
2015/06/12 职场文书