php魔术引号

zbs   ·   发表于 2023-11-04 02:13:58   ·   学习杂记

什么是魔术引号?

当sql句中含有单引号,双引号,反斜杠和NUL时,这时候如果不对这些符号进行转义,写入数据库时就会出错,而魔术引号magic_quotes_gpc()就是对这些符号进行转义以便能把数据正确写入数据库。
魔术引号是程序自动将进入PHP脚本的数据进行转意的过程。当打开时,所有的 ‘(单引号),”(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。和 addslashes() 函数的作用完全相同。
【string addslashes ( string $str )本函数可在PHP4和PHP5下使用。
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。】

!!!默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。
magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。
magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ‘’。而双引号、反斜线 和 NULL 字符将不会进行转义

get_magic_quotes_gpc()获取当前magic_quotes_gpc配置选项设置,如果magic_quotes_gpc处于on,则返回1,magic_quotes_gpc处于off,则返回0,在PHP5.4.0起将始终返回false。
  
magic_quotes_gpc为GPC(GET/POST/COOKIE)操作设置magic_quotes状态。当magic_quotes_gpc为on,所有的’(单引号)、”(双引号)、(反斜杠)和NUL(nulli字符)被一个反斜杠自动转义,本特性已自PHP5.3.0其废弃并将自PHP5.4.0起移除。
如果指令magic_quotes_sybase 为 ON,它会完全覆盖magic_quotes_gpc。 所以即使get_magic_quotes_gpc() 返回true ,双引号、反斜杠或NUL都不会被转义。 只有单引号会被转义。 这种情况下它们看上去像:’’

魔术引号作用:" class="reference-link">魔术引号作用:

当初引入魔术引号是安全方面的考虑,阻止SQL注入。

魔术引号缺陷:" class="reference-link">魔术引号缺陷:

可移植性 :编程时认为其打开或并闭都会影响到移植性。可以用 get_magic_quotes_gpc() 来检查是否打开,并据此编程。

性能: 由于并不是每一段被转义的数据都要插入数据库的,如果所有进入 PHP 的数据都被转义的话,那么会对程序的执行效率产生一定的影响。在运行时调用转义函数(如 addslashes())更有效率。 尽管 php.ini-dist 默认打开了这个选项,但是 php.ini-recommended 默认却关闭了它,主要是出于性能的考虑。

不便: 由于不是所有数据都需要转义,在不需要转义的地方看到转义的数据就很烦。比如说通过表单发送邮件,结果看到一大堆的 \’。

打赏我,让我更有动力~

0 条回复   |  直到 6个月前 | 178 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.