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写的serv-u的web申请账号的程序
Oct 09 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
深入PHP异步执行的详解
Jun 03 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
LNMP部署laravel以及xhprof安装使用教程
Sep 14 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
php快速导入大量数据的实例方法
Sep 23 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
vue实现购物车列表
2020/06/30 Javascript
Python json模块使用实例
2015/04/11 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python selenium循环登陆网站的实现
2019/11/04 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
业务代表的岗位职责
2013/11/16 职场文书
园林资料员岗位职责
2013/12/30 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
老人节标语大全
2014/10/08 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
保安辞职信范文
2015/02/28 职场文书
帝企鹅日记观后感
2015/06/10 职场文书