<?php
$a = addslashes($_GET['a']);
$b = addslashes($_GET['b']);
print_r($a . '<br>');
print_r($b . '<br>');
print_r(str_replace($a, '', $b));
// seay
?>
a=\(反斜線),經 addslashes() 轉義變為 \\(兩個反斜線)。b='(單引號),經 addslashes() 變為 \'(反斜線+單引號)。str_replace($a, '', $b) 將 \\ 替換為空字串,導致 \' 中的反斜線被移除,殘留單引號 ' 逸出 SQL 語法。... WHERE x = '' 形成注入。addslashes() 僅轉義單引號、雙引號、反斜線、NULL,不處理字元編碼問題。str_replace 以字串方式替換,破壞了轉義結構。addslashes(),改用 PDO 預處理語句 或 mysqli_real_escape_string()(需設定正確字元集)。MoonSec 團隊分析:https://www.moonsec.com/