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 相关文章推荐
PHP新手上路(十)
Oct 09 PHP
PHP数据缓存技术
Feb 14 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
php变量范围介绍
Oct 15 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
yii2实现根据时间搜索的方法
May 25 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 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 Ajax中文乱码问题解决方法
2009/02/27 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
全面理解闭包机制
2016/07/11 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
python处理数据,存进hive表的方法
2018/07/04 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Python表达式的优先级详解
2020/02/18 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
通用C#笔试题附答案
2016/11/26 面试题
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
洗车工岗位职责
2014/03/15 职场文书
师德师风承诺书
2014/05/23 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
工作失误检讨书
2015/01/26 职场文书
工作失职自我检讨书
2015/05/05 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技