SoFunction
Updated on 2025-03-04

Analysis of security issues caused by PHP magic quotes

PHP's "\" character generated by magic quotes will bring certain security problems, such as the following code snippet:

// ?xigr='ryat
function daddslashes($string, $force = 0) {
!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
...
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
echo $xigr['hi'];
// echo \

The above code originally expected to obtain an array variable $xigr['hi'] after being safely processed by dadslashes(), but there is no strict type regulation for the variable $xigr. When we submit a string variable $xigr='ryat, it becomes \'ryat after the above processing, and at the end $xigr['hi'] will output \. If this variable is introduced into the SQL statement, it will cause serious security problems. Let's take a look at the following code snippet:

...
if($xigr) {
foreach($xigr as $k => $v) {
$uids[] = $v['uid'];
}
$query = $db->query("SELECT uid FROM users WHERE uid IN ('".implode("','", $uids)."')");

Using the ideas mentioned above, by submitting a construction form like ?xigr[]='&xigr[][uid]=evilcode, it can easily break through GPC or similar security processing and form SQL injection vulnerabilities! This should be given enough attention!