與ASP注入一樣,PHP注入的本質也是透過修改使用者提交的資訊,在未經過濾或過濾不嚴的情況下,將精心構造的SQL語句插入正常的查詢中來達到目的。不同的是,PHP語言在各個方面對變數的處理都更加嚴格。
驗證的繞過
跟ASP一樣,我們也可以巧妙構造SQL語句繞過驗證。例如,以下的驗證語句:
「*」是萬用字元,意思就是把符合條件的記錄裡的所有欄位都查詢出來。為了繞過它,我們可以用經典的「'or''='」,SQL語句則為:
結果為真,可以繞過。同樣的道理,下面幾個也可以繞過:
我們也可以巧妙地運用註解符號來繞過,如「'or 1=1 #」,則SQL語句為:
無論密碼輸入什麼,結果都為真。類似的還有「' or id=1 #」和「admin' #」。這兩個分別是偽裝成「id=1」的使用者或是admin登入,如果這個使用者不存在就不 行了。