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 文件系统详解
Sep 13 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
php写入数据到CSV文件的方法
Mar 14 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 PHP
PHP/HTML混写的四种方式总结
Feb 27 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
php+ajax 文件上传代码实例
Mar 18 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结合飞信 免费天气预报短信
2009/05/07 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
在Python中使用SQLite的简单教程
2015/04/29 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
django Serializer序列化使用方法详解
2018/10/16 Python
python+flask实现API的方法
2018/11/21 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
美国NBA官方商店:NBA Store
2019/04/12 全球购物
演讲比赛获奖感言
2014/02/02 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
离婚案件答辩状
2015/05/22 职场文书
单位工作证明范本
2015/06/15 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
Java如何实现树的同构?
2021/06/22 Java/Android
python内置模块之上下文管理contextlib
2022/06/14 Python
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android