1、Phpwind中有一个db_cv的函数,里面代码如下function db_cv($array){
if(is_array($array)){
foreach($array as $key=>$value){
$array[$key]=str_replace(array("\\","'"),array("\\\\","\'"),$value);
}
}
return $array;
}很多情况下,是这样用的:
while($rt=db_cv($db->fetch_array($query))){看了一下,这个函数不仅做了单引号的替换,还做了一个把双斜线替换成4斜线的替换,模糊记得好像说是啥安全问题,但具体记不住了。想请教一下,这样具体有啥用处?2、addslash()在Update语句中是不是要用啊?在Insert语句中用addslash()功能很正常,但是在update语句中使用,好像就出问题了,斜线都被存入到了数据库中。请问在UPDATE中是否不需要用addslash()?如果不用是否会出安全问题?

解决方案 »

  1.   

    一般都不这么用。不知道你从哪里看的,如果服务器上面把magic_qu...(魔术。。忘了)开了,你根本都不用要这个,如果服务器上面没有开,你只需要把$_POST和$_GET过滤一下就可以了,你得看一些好的代码,例如: phpwind,
    discuz
      

  2.   

    第一个问题
    $array[$key]=str_replace(array("\\","'"),array("\\\\","\'"),$value);
    第一次遇到,不知道
    第二个问题:所有入库前均可进行变量转换,但最好判断一下是否打开魔术引用!如果没有开启就用addslash
    出库同理
      

  3.   

    你要清楚的知道:
    在MYSQL中 ,如果 你不转义/的话,就会出现不可以预料的结果 
      

  4.   

    举个例子给你吧 :
    /*DDL Information For - test.a1*/
    ---------------------------------Table   Create Table                             
    ------  -----------------------------------------
    a1      CREATE TABLE `a1` (                      
              `id` int(11) NOT NULL AUTO_INCREMENT,  
              `str1` char(255) DEFAULT NULL,         
              PRIMARY KEY (`id`)                     
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8     insert into a1(str1) values
    ('http://www.csdn.net'),
    ('c:\lamp.txt'),
    ('c:\\lamp.txt'),
    ('c:\\\\lamp.txt');select * from a1;
    query result(4 records)
    id str1 
    1 http://www.csdn.net 
    2 c:lamp.txt 
    3 c:\lamp.txt 
    4 c:\\lamp.txt 
      

  5.   

    $array[$key]=str_replace(array("\\","'"),array("\\\\","\'"),$value);
    看了下手册,就是将
    $value中的\\ 替换为\\\\
    "'"替换为"\'"相当于加上魔术引用!
    PHP5以上是自动加的,但也可以做一个判断!判断是否开启,如没开启,就用addslash(或楼主的函数)!