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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
PHP curl 并发最佳实践代码分享
Sep 05 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
Laravel配合jwt使用的方法实例
Oct 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 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
菜单效果
2006/10/14 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
javascript中eval解析JSON字符串
2016/02/27 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python函数嵌套实例
2014/09/23 Python
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Tensorflow 实现释放内存
2020/02/03 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
英国足球店:UK Soccer Shop
2017/11/19 全球购物
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
大学生应聘求职信
2014/05/26 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
java项目构建Gradle的使用教程
2022/03/24 Java/Android
golang的文件创建及读写操作
2022/04/14 Golang
Java版 简易五子棋小游戏
2022/05/04 Java/Android