魔术引号的作用是将提交的数据自动进行转义。这个做法是为了安全考虑,但是也有很多不好的方面。毕竟提交的数据并不是全部都需要转义的,转以后,提取出来还得再去处转义符号。

魔术引号 开启后,所有提交的数据都会被转义,具体的转义内容,包括‘(单引号),“(双引号),(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。

从安全上说,这样可以防止一些不当的操作,比如这个字符用来做MYSQL变量。
这样以来,就可以修改你的SQL语句了,而使用转义后,则无效了。

可不是所有数据都需要转义,所以最好还是关闭 魔术引号单独对需要过滤的数据过滤就行。

别说没有SQL注入,我这个网站开到现在,起码有6,7个人好奇使用了这招数。这个是通过访问链接监控到的。不顾我的是文本库,不存在SQL语句问题,所以注入必然失败。

下面讲讲如何关闭 魔术引号 吧。 本站最初也被这个弄的半死。
方法有3个,分别是修改PHP配置文件,APACHE的设置文件,以及PHP全局过滤代码


  1. 1.修改PHP配置文件  
  2. 下面是一个通过 php.ini 文件把这些选项设为 Off 的范例。  
  3. ; Magic quotes  
  4. ;  
  5.  
  6. ; Magic quotes for incoming GET/POST/Cookie data.  
  7. magic_quotes_gpc = Off  
  8.  
  9. ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.  
  10. magic_quotes_runtime = Off  
  11.  
  12. ; Use Sybase-style magic quotes (escape ‘ with ” instead of ’).  
  13. magic_quotes_sybase = Off  

2.APACHE的设置文件
修改网站目录下的 .htaccess
php_flag magic_quotes_gpc Off

有些主机空间可能修改 .htaccess 没有效果,但是能修改php.ini 却也不能生效。比如我用的这个国外空间就是,空间商给每个空间都分配了一个 php.ini.htaccess 而上述方式修改都无效,后来网络查了下,修改 php.ini 后再用 .htaccess 引入目录下的 php.ini 即可,代码如下,绝对路径php.ini 所在的路径
suPHP_ConfigPath 绝对路径

3.PHP全局过滤代码


  1. if (get_magic_quotes_gpc()) {  
  2. function stripslashes_deep($value)  
  3. {  
  4. $value = is_array($value) ?  
  5. array_map(’stripslashes_deep’, $value) :  
  6. stripslashes($value);  
  7.  
  8. return $value;  
  9. }  
  10.  
  11. $_POST = array_map(’stripslashes_deep’, $_POST);  
  12. $_GET = array_map(’stripslashes_deep’, $_GET);  
  13. $_COOKIE = array_map(’stripslashes_deep’, $_COOKIE);  
  14. }  

代码就是这样。最好使用,前2种这样能能提升程序效率~~实在不行再考虑最后一种~~
最后一种可移植性很好~~~就是效率稍微低,如果提交数据量很大,那就不好说了~~