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 相关文章推荐
使用php4加速网络传输
Oct 09 PHP
apache rewrite_module模块使用教程
Jan 10 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
round robin权重轮循算法php实现代码
May 28 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
实例讲解PHP表单处理
Feb 15 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 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/10/20 PHP
php中计算时间差的几种方法
2009/12/31 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
Python 实现随机数详解及实例代码
2017/04/15 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
关于python中导入文件到list的问题
2020/10/31 Python
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
优秀生推荐信范文
2013/11/28 职场文书
团拜会策划方案
2014/06/07 职场文书
离婚起诉书范本
2015/05/18 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers
python标准库ElementTree处理xml
2022/05/20 Python