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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
PHP中一个控制字符串输出的函数
Oct 09 PHP
PHP安全配置
Dec 06 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
php 流程控制switch的简单实例
Jun 07 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
详解php协程知识点
Sep 21 PHP
PHP实现字符串的全排列详解
Apr 24 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
用cookies来跟踪识别用户
2006/10/09 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
js实现内置计时器
2019/12/16 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
Python实现备份文件实例
2014/09/16 Python
安装dbus-python的简要教程
2015/05/05 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
某公司部分笔试题
2013/11/05 面试题
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
员工福利申请报告
2015/05/15 职场文书