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在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP中如何定义和使用常量
Feb 28 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
详解PHP中的状态模式编程
Aug 11 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
laravel ORM关联关系中的 with和whereHas用法
Oct 16 PHP
基于laravel缓冲cache的用法详解
Oct 23 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
星际RPG字典
2020/03/04 星际争霸
怎样在php中使用PDF文档功能
2006/10/09 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
python多进程实现文件下载传输功能
2018/07/28 Python
Django中信号signals的简单使用方法
2019/07/04 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
JAVA代码查错题
2014/10/10 面试题
办公室秘书自我鉴定
2014/01/18 职场文书
经典广告词大全
2014/03/14 职场文书
团购业务员岗位职责
2014/03/15 职场文书
家长学校工作方案
2014/05/07 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
MySQL之DML语言
2021/04/05 MySQL
react国际化react-intl的使用
2021/05/06 Javascript
Python list列表删除元素的4种方法
2021/11/01 Python
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
MySQL 计算连续登录天数
2022/05/11 MySQL
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python