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数据浏览器
Oct 09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 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
一个好用的分页函数
2006/11/16 PHP
php存储过程调用实例代码
2013/02/03 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
php使用iconv中文截断问题的解决方法
2015/02/11 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
python查看微信好友是否删除自己
2016/12/19 Python
对Python中的@classmethod用法详解
2018/04/21 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Python检查ping终端的方法
2019/01/26 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
python和JavaScript哪个容易上手
2020/06/23 Python
个人股份合作协议书
2014/10/24 职场文书
资金申请报告范文
2015/05/14 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python