PHP魔术引号是在编程过程中必须注意的,否则会带来灾难性的麻烦,汗,今天就有客户找我了,我排查错误半天,发现是PHP魔术引号在作怪!真是很 郁闷的一件事,我就纳闷儿了,PHP默认魔术引号是关闭的,那个破网管闲的没事,给打开了!后来,偶找到他,他还给偶谈一些什么SQL注入的大道理,唉, 真是无语!!
PHP的魔术引号给程序编写带来了一丁点方便,但却严重影响的程序的可移植性,在开启magic_quotes_gpc的环境下写的程序到没开启的环境下就有可能出现错误。所以通常情况下,我们会关闭magic_quotes_gpc以避免它带来的问题。
手册里介绍了三种方法,在些整理一下:
1 修改PHP配置文件php.ini
这种方法只适于自己有权管理服务器的情况下,如果用的虚拟空间,那就只能采用后两条方法。
在PHP配置文件php.ini中将magic_quotes_gpc、magic_quotes_runtime、magic_quotes_sybase全部设为off。如下所示:
; Magic quotes
;
; Magic quotes for incoming GET/POST /Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ‘ with ” instead of ’).
magic_quotes_sybase = Off
2 利用.htaccess文件
该方法只在服务器支持htaccess的情况下,现在的服务器一般都会支持的
在程序目录下.htaccess文件中增加下面一句:
php_flag magic_quotes_gpc Off
3 在代码中屏蔽
该方法是移植性最强的,不用考虑服务器的配置,只要支持PHP就可以使用。
在所有PHP文件开始处增加下面代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php if (get_magic_quotes_gpc()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_POST = array_map('stripslashes_deep', $_POST); $_GET = array_map('stripslashes_deep', $_GET); $_COOKIE = array_map('stripslashes_deep', $_COOKIE); $_REQUEST = array_map('stripslashes_deep', $_REQUEST); } ?> |
自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com