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中使用Oracle数据库(6)
Oct 09 PHP
PHP的单引号和双引号 字符串效率
May 27 PHP
PHP 一个随机字符串生成代码
May 26 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 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
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
php函数式编程简单示例
2019/08/08 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
详解将Django部署到Centos7全攻略
2018/09/26 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
业务经理岗位职责
2013/11/11 职场文书
上级检查欢迎词
2014/01/18 职场文书
初一学生期末评语
2014/04/24 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
2014公司年终工作总结
2014/12/19 职场文书
贷款担保书范本
2015/09/22 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python