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作的文本留言本的例子(四)
Oct 09 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
检查php文件中是否含有bom的函数
May 31 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
twig里使用js变量的方法
Feb 05 PHP
php处理json格式数据经典案例总结
May 19 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
laravel 实现划分admin和home 模块分组
Oct 15 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 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
JS代码格式化和语法着色V2
2006/10/14 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
进一步探究Python中的正则表达式
2015/04/28 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
python如何更新包
2020/06/11 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
运动会广播稿50字
2014/01/26 职场文书
公司门卫管理制度
2014/02/01 职场文书
大二学生自我检讨书
2014/10/23 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书