不受魔术引号影响的PHP应用
来源:互联网 发布:excel数据恢复 方法 编辑:程序博客网 时间:2024/04/29 20:39
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_sybase | 当关闭时,所有的 '(单引号),"(双引号),/(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ''。而双引号、反斜线 和 NULL 字符将不会进行转义。 (前提是magic_quotes_gpc = On) | YES | Off |
从上表可以看出,对于magic_quotes_runtime,在程序中用 ini_set('magic_quotes_runtime', 0);就可以把它关掉,然后可以用自己的方法来处理来自数据库或文件的数据。
但是要处理外部传来的全局变量就比较麻烦了。下面的代码可供使用,这里将屏蔽magic_quotes_sybase,只是将引号之类的东西前面加上反斜线(/),用于提交给MySql数据库。
PHP代码
- function quotesOuterVars($var) {
- if (is_array($var)) {
- return array_map('quotesOuterVars',$var);
- } else {
- if (get_magic_quotes_gpc()) {
- // 如果 magic_quotes_sybase=On,我们先把 '' 替换成 ',然后再addslashes
- if (ini_get('magic_quotes_sybase')) {
- $var = str_replace("''", "'", $var);
- $var = addslashes($var);
- }
- } else{
- $var = addslashes($var);
- }
- return trim($var);
- }
- }
- 不受魔术引号影响的PHP应用
- 编写不受魔术引号影响的php应用
- 关于PHP的魔术引号
- php魔术引号
- PHP 魔术引号
- PHP 关闭魔术引号
- php魔术引号总结
- PHP 魔术引号
- PHP 魔术引号详解讲解
- PHP 魔术引号详解讲解
- php魔术方法的应用
- 关于设置应用的高度不受状态栏高度的影响
- Android 中应用的字体大小不受系统字体大小影响
- php中的“魔术引号”- magic quotes
- 总结3:PHP中的魔术引号
- 魔术引号
- php常见魔术方法的应用场景
- 当php配置文件中魔术引号方法没有开启时的解决方案
- [Mysql] Data truncation: Data too long for column ......
- C++中基类,派生类 类成员对象的构造函数,析构函数的顺序
- VS2005問題
- Java异常处理总结
- Java的定时器的简单样例
- 不受魔术引号影响的PHP应用
- 2008.11.12
- C++重读(转载)
- webgis开源列表
- 谁是谁的旅途,我不在乎
- 有关更新关联表遇到的问题.
- my_fclose(),将数据立即写到介质上
- 职场的黑色隧道
- 复数-共轭-埃尔米特矩阵(Hermite矩阵)-正定矩阵