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 相关文章推荐
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
坏狼php学习 计数器实例代码
Jun 15 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
CentOS安装php v8js教程
Feb 26 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 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 柱状图实现代码
2009/12/04 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
IE下js调试工具Companion.JS
2010/10/15 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
python从ftp下载数据保存实例
2013/11/20 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python定时器实例代码
2017/11/01 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
基于python历史天气采集的分析
2019/02/14 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
python支付宝支付示例详解
2019/08/22 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
别名指示符是什么
2012/10/08 面试题
业务员岗位职责范本
2013/12/15 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
民间借贷借条如何写
2015/05/26 职场文书
股权投资协议书
2016/03/23 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
vue中data里面的数据相互使用方式
2022/06/05 Vue.js