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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
PHP session 会话处理函数
Jun 06 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
php+laravel 扫码二维码签到功能
May 15 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
咖啡与牛奶
2021/03/03 冲泡冲煮
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
php 获取客户端的真实ip
2009/11/30 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
用vue写一个日历
2020/11/02 Javascript
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
linux安装python修改默认python版本方法
2019/03/31 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Django框架视图介绍与使用详解
2019/07/18 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
会议开场欢迎词
2014/01/15 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
人事经理岗位职责
2014/04/28 职场文书
大学新学期计划书
2014/04/28 职场文书
合作经营协议书范本
2014/09/16 职场文书
房屋所有权证明
2015/06/19 职场文书