返回列表 发帖

[提问] 一个关于discuz源代码的问题

函数如下:
function daddslashes($string, $force = 0)
{
if(!$GLOBALS['magic_quotes_gpc'] || $force)
{
   if(is_array($string))
   {
    foreach($string as $key => $val)
    {
     $string[$key] = daddslashes($val, $force);
    }
   }
   else
   {
    $string = addslashes($string);
   }
}
return $string;
}
请高人指点 这个函数是如何实现对数据的转译工作的
是用PHP自带的magic_quotes_gpc函数吗
源文件中根本没有正则表达式之类的实现转译功能的语句
一个很猥琐的家伙

刚刚查DZ源文件,这个函数应该是在include/global.func.php里的吧
现在的源文件里好像比你帖出来的多了第二行代码
  1. function daddslashes($string, $force = 0) {
  2.         !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
  3.         if(!MAGIC_QUOTES_GPC || $force) {
  4.                 if(is_array($string)) {
  5.                         foreach($string as $key => $val) {
  6.                                 $string[$key] = daddslashes($val, $force);
  7.                         }
  8.                 } else {
  9.                         $string = addslashes($string);
  10.                 }
  11.         }
  12.         return $string;
  13. }
复制代码


这个函数是防SQL注入的
其中PHP自带函数get_magic_quotes_gpc(void)的功能是获取PHP环境配置的变量magic_quotes_gpc
PHP环境配置的变量magic_quotes_gpc有on和off两种状态,返回0表示off,1表示on; 在php.ini文件里可以看到(如果你电脑上配置有PHP环境的话可以打开php.ini看看)

当 magic_quotes_gpc=on时,所有的 ' (单引号), " (双引号), \ (反斜线) 和空字符(NULL)会自动转为含有反斜线的溢出字符。
而magic_quotes_gpc=off时则不作上述处理,此时就有可能会导致SQL注入问题,所以off状态时字符串要经addslashes()函数处理
addslashes ( string str )函数也是PHP自带的,其作用是返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线,这些字符包括单引号(')、双引号(")、反斜线(\)与 NULL(NULL 字符)。

上面的daddslashes($string, $force = 0)函数是自定义的,而$string = addslashes($string);则是使用了PHP自带的string addslashes ( string str )函数。

小结:
为了防SQL注入
当magic_quotes_gpc=off时字符串要经addslashes()函数处理
当magic_quotes_gpc=on时字符串会默认将敏感字符(单引、双引等)加把斜线处理(此时不可再多加addslashes()函数)。
专注于自我的兴趣和理想

TOP


果然是实力派
佩服
我就知道你会来回答我的问题
下次我就直接点名叫你回答了哈
一个很猥琐的家伙

TOP

返回列表