魔术引号的作用是将提交的数据自动进行转义。这个做法是为了安全考虑,但是也有很多不好的方面。毕竟提交的数据并不是全部都需要转义的,转以后,提取出来还得再去处转义符号。
魔术引号 开启后,所有提交的数据都会被转义,具体的转义内容,包括‘(单引号),“(双引号),(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。
从安全上说,这样可以防止一些不当的操作,比如这个字符用来做MYSQL变量。
这样以来,就可以修改你的SQL语句了,而使用转义后,则无效了。
可不是所有数据都需要转义,所以最好还是关闭 魔术引号单独对需要过滤的数据过滤就行。
别说没有SQL注入,我这个网站开到现在,起码有6,7个人好奇使用了这招数。这个是通过访问链接监控到的。不顾我的是文本库,不存在SQL语句问题,所以注入必然失败。
下面讲讲如何关闭 魔术引号 吧。 本站最初也被这个弄的半死。
方法有3个,分别是修改PHP配置文件,APACHE的设置文件,以及PHP全局过滤代码
- 1.修改PHP配置文件
- 下面是一个通过 php.ini 文件把这些选项设为 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.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全局过滤代码
- 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);
- }
代码就是这样。最好使用,前2种这样能能提升程序效率~~实在不行再考虑最后一种~~
最后一种可移植性很好~~~就是效率稍微低,如果提交数据量很大,那就不好说了~~
转载于:https://blog.51cto.com/wxweven520/809432
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110451.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...