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的FTP学习(一)[转自奥索]
Oct 09 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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简单计算页面加载时间的方法
2015/06/19 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
详解Js中的模块化是如何实现的
2017/10/18 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Python反射用法实例简析
2017/12/22 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python每天定时运行某程序代码
2019/08/16 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
经典c++面试题二
2015/08/14 面试题
班主任班级寄语大全
2014/04/04 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
学雷锋的心得体会
2014/09/04 职场文书
政风行风评议工作总结
2014/10/21 职场文书
上下班时间调整通知
2015/04/23 职场文书
办公室日常管理制度
2015/08/04 职场文书