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 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
php使用websocket示例详解
Mar 12 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
PHP会话处理的10个函数
Aug 11 PHP
XHProf报告字段含义的解析
May 17 PHP
laravel5.4生成验证码的实例讲解
Aug 05 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使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
简述JS控制台的使用
2018/07/15 Javascript
js的对象与函数详解
2019/01/21 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
详解Python time库的使用
2019/10/10 Python
Python如何读写CSV文件
2020/08/13 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
人事部经理岗位职责
2014/03/07 职场文书
十八大标语口号
2014/10/09 职场文书
师德师风个人总结
2015/02/06 职场文书
事业单位岗位说明书
2015/10/08 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
python process模块的使用简介
2021/05/14 Python