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调用Java对象的方法
Oct 09 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
PHP闭包(Closure)使用详解
May 02 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
thinkphp的c方法使用示例
Feb 24 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 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获取网卡地址的代码
2008/04/09 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
js 上传图片预览问题
2010/12/06 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
详解python中的文件与目录操作
2017/07/11 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python的UTC时间转换讲解
2019/02/26 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
销售员态度差检讨书
2014/10/26 职场文书
新郎新娘答谢词
2015/01/04 职场文书
督导岗位职责
2015/02/04 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers