The security of PHP lies in the fact that its default configuration php.ini-dist has a magic_quotes_gpc = On thing called "Magic Quotes", which is very useful for PHP beginners. "Although SQL injection can still occur when magic quotes are turned on. It is possible, but at least the risk of the system is reduced a lot” (PHP Manual). However, it has an impact on the portability of PHP code, and not every data escaped by magic quotes needs to be written to the database, which has an impact on the execution efficiency of the program. It is better to use addslashes(), so in
magic_quotes_gpc = Off in php.ini-recommended.
Here we use a function to determine whether magic_quotes_gpc is turned on, and then determine whether addslashes() is needed. Of course, this may affect the efficiency.
There are three magic quote configuration options in the PHP system configuration file php.ini:
Magic quote configuration options |
Description |
Change at runtime |
Default value in PHP |
magic_quotes_gpc |
If turned on, it will affect
to HTTP request data (GET, POST and COOKIE). |
NO |
On |
magic_quotes_runtime |
If turned on, most
For functions that retrieve and return data from external sources, including databases and text files, the returned data will be backslash-escaped. (provided magic_quotes_gpc = On) |
YES |
Off |
magic_quotes_sybase |
When closed, all
(single quote), " (double quote), (backslash) and NULL characters are automatically escaped with a backslash. This has exactly the same effect as addslashes().
魔术引号配置选项 |
描述 |
运行时改变 |
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 |
If on, single quotes will be escaped using single quotes instead of backslashes. This option completely overrides
magic_quotes_gpc. If both options are turned on, single quotes will be escaped. Double quotes, backslashes, and NULL characters will not be escaped.
(provided magic_quotes_gpc = On) |
YES |
Off |
As can be seen from the above table, for magic_quotes_runtime, you can turn it off by using ini_set(magic_quotes_runtime, 0); in the program, and then you can use your own method to process data from the database or file.
But it is more troublesome to deal with global variables transmitted from the outside. The following code is available for use. Magic_quotes_sybase will be blocked here, and only quotation marks and the like are preceded by a backslash () for submission to the MySql database.
functionquotesOuterVars($var) {
if(is_array($var)) {
returnarray_map(quotesOuterVars,$var);
}else{
if( get_magic_quotes_gpc()) {
using using use ’ s ’ using ’ using ’s ’ s ‐ ‐ out var);
$var=addslashes($var);
}
}else{
$var=addslashes($var);
}
returntrim($var);
}
}
?>
http://www.bkjia.com/PHPjc/486162.html
www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/486162.htmlTechArticleThe security of PHP is that its default configuration php.ini-dist has a magic_quotes_gpc = On thing, called "magic Magic Quote", useful for PHP beginners, "Although SQL injection is...
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn