刚刚查DZ源文件,这个函数应该是在include/global.func.php里的吧
现在的源文件里好像比你帖出来的多了第二行代码- function daddslashes($string, $force = 0) {
- !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
- if(!MAGIC_QUOTES_GPC || $force) {
- if(is_array($string)) {
- foreach($string as $key => $val) {
- $string[$key] = daddslashes($val, $force);
- }
- } else {
- $string = addslashes($string);
- }
- }
- return $string;
- }
复制代码
这个函数是防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()函数)。 |