PHP之安全在于其默认配置php.ini-dist中具备一个magic_quotes_gpc = On的东西,叫“魔术引号(Magic Quote)”,对PHP初学者很有用,“尽管SQL注入在魔术引号打开的情况下仍然有可能实现,但起码系统的风险减少很多了”(PHP手册)。但是对于 PHP代码的移植性却造成了影响,而且并不是每一个被魔术引号转义的数据都需要写入数据库,这样就对程序的执行效率造成了影响,倒不如使用 addslashes(),所以在
php.ini-recommended中magic_quotes_gpc = Off。
这里用一段函数来判断是否打开了magic_quotes_gpc,然后确定是否需要addslashes(),当然,这样做可能效率会受到影响。
PHP系统配置文件php.ini中有三个魔术引号配置选项:
| 魔术引号配置选项 | 描述 | 运行时改变 | PHP中的默认值 |
| magic_quotes_gpc | 如果打开的话,影响 到 HTTP 请求数据(GET,POST 和 COOKIE)。 | NO | On |
| magic_quotes_runtime | 如果打开的话,大部 份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。(前提是magic_quotes_gpc = On) | YES | Off |
| magic_quotes_sy | 当关闭时,所有的 (单引号),"(双引号),(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 。而双引号、反斜线 和 NULL 字符将不会进行转义。 (前提是magic_quotes_gpc = On) |
YES | Off |
从上表可以看出,对于magic_quotes_runtime,在程序中用 ini_set(magic_quotes_runtime, 0);就可以把它关掉,然后可以用自己的方法来处理来自数据库或文件的数据。
但是要处理外部传来的全局变量就比较麻烦了。下面的代码可供使用,这里将屏蔽magic_quotes_sy ,只是将引号之类的东西前面加上反斜线(),用于提交给MySql数据库。
<?php
if (is_null($_GET[\"search\"])) {
echo \'<form method=\"\'.htmlentities($_SERVER[\"PHP_SELF\"]).\'\" method=\"GET\">\';
echo \' <label>\';
echo \' Search:\';
echo \' <input type=\"text\" name=\"search\" id=\"search\" />\';
echo \' </label>\';
echo \' <input type=\"submit\" value=\"Go!\" />\';
echo \'</form>\';
} else {
$search = $_GET[\"search\"];
if (!get_magic_quotes_gpc( )) {
$search = htmlentities($search);
}
if ($search != NULL ){
echo \"The search string is: <strong>$search</strong>.\";
}
}
?> 继续阅读与本文标签相同的文章
上一篇 :
微信发现公众号,张小龙再探信息流
下一篇 :
php 将数组转换为xml
-
未来几年,这4个大学专业最吃香,前景广阔堪称铁饭碗!
2026-05-14栏目: 教程
-
这间屋子没有电话
2026-05-14栏目: 教程
-
曾经扬言“我要摧毁人类”的机器人,在拥有公民身份后,近况如何?
2026-05-14栏目: 教程
-
中国客车“抢眼”世界客车博览会
2026-05-14栏目: 教程
-
充分利用系统磁盘空间,Windows 7操作系统如何创建压缩文件夹
2026-05-14栏目: 教程
