php addslashes及其他清除空格的方法是不安全的


Posted in PHP onJanuary 25, 2012

清除空格的方法是不安全的,部分原因是因为字符中的空格非常多,例如 "addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。"

最好是按照具体的参数需求校验确定是 int 等不是,外加数据库的参数操作方法.其实这个是数据库的 sql 问题,应该从源头数据库本身来解决,只不过有些数据库滑提供相应的方法罢了.

SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录遭到暴露,更改或被删除。

为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc选项启用,那么输入的字符串中的单引号,双引号和其它一些字符前将会被自动加 上反斜杠\。

但Magic Quotes并不是一个很通用的解决方案,没能屏蔽所有有潜在危险的字符,并且在许多服务器上Magic Quotes并没有被启用。所以,我们还需要使用其它多种方法来防止SQL注入。

许 多数据库本身就提供这种输入数据处理功能。例如PHP的MySQL操作函数中有addslashes()、 mysql_real_escape_string()、mysql_escape_string()等函数,可将特殊字符和可能引起数据库操作出错的字 符转义。那么这三个功能函数之间有什么却别呢?下面我们就来详细讲述下。

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

另外对于php手册中get_magic_quotes_gpc的举例:
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST[‘lastname']);
} else {
$lastname = $_POST[‘lastname'];
}
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST['lastname']进行检查一下。

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

总结一下:

* addslashes() 是强行加\;
* mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
* mysql_escape_string不考虑连接的当前字符集。

dz中的防止sql注入就是用addslashes这个函数,同时在dthmlspecialchars这个函数中有进行一些替换$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1',这个替换解决了注入的问题,同时也解决了中文乱码的一些问题

PHP 相关文章推荐
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
Jun 10 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
php通过header发送自定义数据方法
Jan 18 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 #PHP
php中将数组存到文件里的实现代码
Jan 19 #PHP
PHP取进制余数函数代码
Jan 19 #PHP
PHP采集腾讯微博的实现代码
Jan 19 #PHP
Php图像处理类代码分享
Jan 19 #PHP
调试一段PHP程序时遇到的三个问题
Jan 17 #PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 #PHP
You might like
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
Vue.js实现立体计算器
2020/02/22 Javascript
js实现计算器功能
2020/08/10 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Python3 操作符重载方法示例
2017/11/23 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
交通文明倡议书
2014/05/16 职场文书
求职信内容怎么写
2014/05/26 职场文书
2015年社区工作总结
2015/04/08 职场文书
党员转正介绍人意见
2015/06/03 职场文书
班主任工作总结范文
2015/08/13 职场文书
2016小学新学期寄语
2015/12/04 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Python中的socket网络模块介绍
2022/07/23 Python