PHP与SQL注入攻击[三]


Posted in PHP onApril 17, 2007

这几天太忙,继续连载哈哈,争取半个月结束。

上文说到数据库自带的不安全输入过滤功能,但这样的功能不是所有数据库都有的。目前大概只有MySQL,SQLite,PostgreSQL,Sybase带有这样的功能,而包括Oracle和SQL Server在内的很多数据库都没有。

鉴于这样的情况,一般开发者采用一种通用的方法来避免不安全的数据写入数据库--base64编码。这样可以避免所有可能引起问题的特殊字符造成的危险。但Base64编码后的数据容量大概会增加33%,比较占用空间。在PostgreSQL中,使用Base64编码数据还有个问题,就是无法使用'LIKE'查询。

所以总结这么多,我们知道光靠数据库自身的字符串屏蔽也是不行的。我们需要一种解决方案,在特殊字符影响到我们的Query语句之前,就把危险的字符过滤掉。预定义查询(Prepared queries/prepared statements)是一个非常好的方法。什么是预定义查询呢? 它就相当于一个查询语句的模板,定义了查询语句的结构和某些部份的数据类型。如果我们提交的SQL语句符合这个模板的定义,就执行,否则就不执行,报出错误。

例如:

pg_query($conn, “PREPARE stmt_name (text) AS SELECT * FROM users WHERE name=$1”);
pg_query($conn, “EXECUTE stmt_name ({$name})”);
pg_query($conn, “DEALLOCATE stmt_name”);

PREPARE stmt_name (text) AS ..定义了一个查询的格式,这里除了$1之外的所有字符都是占位符,不允许更改。呵呵,我觉得这种方法实在是个好方法。不过可惜不是所有数据库都支持。。

PHP 相关文章推荐
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
PHP isset()与empty()的使用区别详解
Feb 10 PHP
PHP的简单跳转提示的实现详解
Mar 14 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
PHP与SQL注入攻击[二]
Apr 17 #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
You might like
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
php常用正则函数实例小结
2016/12/29 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
图片按比例缩放函数
2006/06/26 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
利用ctypes提高Python的执行速度
2016/09/09 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
深入浅析python with语句简介
2018/04/11 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
《迟到》教学反思
2016/02/24 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL