Discuz! X1.5 因濫用 urldecode() 導致盲目 SQL 注入。PHP 手冊明確警告:$_GET、$_REQUEST 已自動解碼,對其元素再次使用 urldecode() 會產生危險結果。
' 進行雙重 URL 編碼:%2527。$_POST 時自動解碼一次,變為 %27。%27 非單引號,magic_quotes_gpc 不會轉義。urldecode(),%27 還原為單引號 ',導致 SQL 注入。foreach($_POST as $k => $v) {
$value = urldecode($v); // 畫蛇添足
$this->setParameter($k, $value);
}
urldecode(),理解 PHP 自動解碼機制。原文來源:https://demon.tw/programming/php-urldecode-sql-injection.html