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 相关文章推荐
PHP 柱状图实现代码
Dec 04 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
php实现推荐功能的简单实例
Sep 29 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网络操作函数汇总
2015/05/18 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python内置加密模块用法解析
2019/11/25 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
python开根号实例讲解
2020/08/30 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
理工科学生的自我评价
2013/12/15 职场文书
2016年情人节广告语
2016/01/28 职场文书
高一作文之暖冬
2019/11/09 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL