php stripslashes和addslashes的区别

我们在向mysql写入数据时,比如:

复制代码 代码如下:

mysql_query("update table set `title`='kuhanzhu's blog'");

那就会出错。同asp时一样,数据库都会对单引号过敏。而addslashes在这个时候就最长面子了,跟asp的replace(”‘”,”””,”kuhanzhu's blog”)功能一样。

PHP为了安全性,所以引入了个magic_quotes_gpc = On的功能,可以不需要做任何处理就能直接把单引号插入数据库中,那么对于Off时,则需要考虑单引号的问题了,而不是一味地信任运行环境。

magic_quotes_gpc = On时,使用了addslashes()处理后的数据在数据库中将以\'形式保存,如果此时直接输出的话,就会发现比自己期待的内容多了个\,因此stripslashes()出场了,它能把\去掉(区别于str_replace(”\”, “”,$Str))。

magic_quotes_gpc = Off时,使用了addslashes()处理后的数据在数据库中将以'形式保存,没有上面说的有\的问题,addslashes()起到插入数据不出错的作用,如果此时直接输出的话,数据正常。不需要再用stripslashes()。

addslashes()和stripslashes()正好是相反的,直接记忆:addslashes()加个\,stripslashes()去个\

那么什么时候用呢?

简单说:

当magic_quotes_gpc = On时,系统会自动处理单引号等问题,用不用addslashes()和stripslashes()都没关系,但是如果添加数据时用了addslashes(),那么显示数据时必须要stripslashes()

当magic_quotes_gpc = Off时,系统不会处理单引号等问题,所以插入数据时必须要使用addslashes(),显示数据时则不需要使用stripslashes()。

既然有了分析,做程序时要怎么办呢?根据以上两种情况,可得:

不管magic_quotes_gpc是On还是Off,咱添加数据时都用addslashes(),当On时,必须使用stripslashes(),Off时则不能用stripslashes()。

如何判断On还是Off呢?用get_magic_quotes_gpc()。

最后举例:

复制代码 代码如下:

代码
//提交数据,或者变量准备:
$Content=addslashes(”这里面是数据,不管有没单引号或者还是变量”);
//插入数据到数据库,代码省略
//开始显示数据
$Content=”从数据库读取的数据”;
if(get_magic_quotes_gpc()){
  $Content=stripslashes($Content);
}
echo $Content;

时间: 2014-01-31

php addslashes和mysql_real_escape_string

很好的说明了addslashes和mysql_real_escape_string的区别,虽然国内很多PHP coder仍在依靠addslashes防止SQL注入(包括我在内),我还是建议大家加强中文防止SQL注入的检查.addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截. 当然addslashes也不是毫无用处,它是

PHP函数addslashes和mysql_real_escape_string的区别

首先:不要使用mysql_escape_string,它已被弃用,请使用mysql_real_escape_string代替它. mysql_real_escape_string和addslashes的区别在于: 区别一: addslashes不知道任何有关MySQL连接的字符集.如果你给所使用的MySQL连接传递一个包含字节编码之外的其他编码的字符串,它会很愉快地把所有值为字符'.".\和\x00的字节进行转义.如果你正在使用不同于8位和UTF-8的其它字符,这些字节的值不一定全部都是表示字符

php daddslashes()和 saddslashes()有哪些区别分析

//GPC过滤,自动转义$_GET,$_POST,$_COOKIE中的特殊字符,防止SQL注入攻击 $_GET = saddslashes($_GET); $_POST = saddslashes($_POST); 复制代码 代码如下: 下面是daddslashes()和 saddslashes()的例子eg: saddslashes function daddslashes($string, $force = 0, $strip = FALSE) { //字符串或数组 是否强制 是否去除 //

php中addslashes函数与sql防注入

本文实例讲述了php中addslashes函数与sql防注入.分享给大家供大家参考.具体分析如下: addslashes可会自动给单引号,双引号增加\\\\\\,这样我们就可以安全的把数据存入数据库中而不黑客利用,参数'a..z'界定所有大小写字母均被转义,代码如下: 复制代码 代码如下: echo addcslashes('foo[ ]','a..z'); //输出:foo[ ] $str="is your name o'reilly?"; //定义字符串,其中包括需要转义的字符 e

解析php addslashes()与addclashes()函数的区别和比较

PHP addcslashes() 函数定义和用法addcslashes() 函数在指定的字符前添加反斜杠.语法addcslashes(string,characters)参数 描述 string 必需.规定要检查的字符串. characters 可选.规定受 addcslashes() 影响的字符或字符范围. 提示和注释注释:在对 0,r,n 和 t 应用 addcslashes() 时要小心.在 PHP 中,\0,\r,\n 和 \t 是预定义的转义序列.实例例子 1在本例中,我们要向字符串

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

清除空格的方法是不安全的,部分原因是因为字符中的空格非常多,例如 "addslashes的问题在 于黑客 可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会 被看作是单引号,所以addslashes无法成功拦截." 最好是按照具体的参数需求校验确定是 int 等不是,外加数据库的参数操作方法.其实这个是数据库的 sql 问题,应该从源头数据库本身来解决,只不过有些数据库滑提供相应的方法罢了.

php addslashes 函数详细分析说明

语法: string addslashes(string str); 内容说明 本函数使需要让数据库处理的字符串中引号的部份加上斜线,以供数据库查询 (query) 能顺利运作.这些会被改的字符包括单引号 (').双引号 (").反斜线 backslash (\) 以及空字符 NUL (the null byte). ================================================================ 1,表单提交中addslashes的表现. 首先要

PHP中addslashes与mysql_escape_string的区别分析

本文实例分析了PHP中addslashes与mysql_escape_string的区别.分享给大家供大家参考,具体如下: 1.在插入数据时两者的意义基本一样.区别只在于addslashes 在magic_quotes_sybase=on时将" '"转换成" ' '" 在magic_quotes_sybase=off时将" '"转换成"\ '" 而mysql_escape_string总是将" '"转换成&

PHP中使用addslashes函数转义的安全性原理分析

本文实例讲述了PHP中使用addslashes函数转义的安全性原理分析.分享给大家供大家参考.具体分析如下: 先来看一下ECshop中addslashes_deep的原型 复制代码 代码如下: function addslashes_deep($value) {     if (empty($value)) {         return $value;  //如为空,直接返回;     } else {         return is_array($value) ? array_map(

iOS中无限循环滚动简单处理实现原理分析

说下原理: 1./*初始化/ + (instancetype)loopScrollViewWithFrame:(CGRect)frame; 将背景collectinview视图初始化设置 代理和数据源 . 布局 2.在激活initwithFrame后触发 layoutSubviews //默认滚动到要显示的第一张图片 if (self.imageCollectionView.contentOffset.x == 0) { NSIndexPath *indexPath = [NSIndexPath

PHP中实现中文字符进制转换原理分析

一,中文字符转十进制原理分析 GBK编码中一个汉字由二个字符组成,获取汉字字符串的方法如下 复制代码 代码如下: $string = "不要迷恋哥"; $length = strlen($string); for($i=0;$i<$length;$i++){ if(ord($string[$i])>127){ $result[] = ord($string[$i]).' '.ord($string[++$i]); } } var_dump($result); 由于一个汉字为

php中使用addslashes函数报错问题的解决方法

大家看下面的代码,能发现错误在哪里吗? 复制代码 代码如下: <?phpecho function_exists('addcslashes');//检测是否存在该函数echo get_magic_quotes_gpc().'<br/>';//检测是否开启自动转义echo PHP_VERSION.'<br/>';//php版本信息echo addcslashes("Who's John Adams?");echo '<br/>';$str = &

Javascript-Mozilla和IE中的一个函数直接量的问题分析

我在这里写这个也是写点在做js时遇到的问题,当个笔记.没有想到被hax "批"了一顿,不过也是说得有些道理的.毕竟这个内容也不痛不痒的 一般情况下,我们在JS中用函数直接量来命名一个简单的函数. <script type="text/javascript"> var func=function(s){window.alert(s)}; func("never-online") </script> 这在IE或者Mozilla

.Net中如何操作IIS的虚拟目录原理分析及实现方案

.Net中实际上已经为我们在这方面做得很好了.FCL中提供了不少的类来帮助我们完成这项工作,让我们的开发工作变非常简单和快乐.编程控制IIS实际上很简单,和ASP一样,.Net中需要使用ADSI来操作IIS,但是此时我们不再需要GetObject这个东东了,因为Net为我们提供了更加强大功能的新东东. System.DirectoryServices命名空间中包括了些强大的东东--DirectoryEntry, DirectoryEntries,它们为我们提供了访问活动目录的强大功能,在这些类允

PHP addslashes()函数讲解

PHP addslashes() 函数 实例 在每个双引号(")前添加反斜杠: <?php $str = addslashes('What does "yolo" mean?'); echo($str); ?> 定义和用法 addslashes() 函数返回在预定义的字符前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL 提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备合适的字符串. 注释:默认情况

C++中的friend函数详细解析

为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率.如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数.具体来说:为了使其他类的成员函数直接访问该类的私有变量.即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数. 实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元.(2)两个类要共享数据的时候. 使用友元函数的优缺点 优点:能够提高效率,表达简单.清晰. 缺点:友元函数破环

深入解析C++编程中的静态成员函数

C++静态成员函数 与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加static就成了静态成员函数.如 static int volume( ); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分. 如果要在类外调用公用的静态成员函数,要用类名和域运算符"::".如 Box::volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已. 与静态数据成员不同,静态成