1.# 和 -- (有個空格)表示注釋,可以使它們后面的語句不被執行。在url中,如果是get請求(記住是get請求,也就是我們在瀏覽器中輸入的url) ,解釋執行的時候,url中#號是用來指導瀏覽器動作的,對服務器端無用。所以,HTTP請求中不包括#,因此使用#閉合無法注釋,會報錯;而使用-- (有個空格),在傳輸過程中空格會被忽略,同樣導致無法注釋,所以在get請求傳參注入時才會使用--+的方式來閉合,因為+會被解釋成空格。
2.當然,也可以使用--%20,把空格轉換為url encode編碼格式,也不會報錯。同理把#變成%23,也不報錯。
3.如果是post請求,則可以直接使用#來進行閉合。常見的就是表單注入,如我們在后台登錄框中進行注入。
4.為什么--后面必須要有空格,而#后面就不需要?
因為使用--注釋時,需要使用空格,才能形成有效的sql語句,而#后面可以有空格,也可以沒有,sql就是這么規定的,記住就行了。
因為不加空格,--直接和系統自動生成的單引號連接在了一起,會被認為是一個關鍵詞,無法注釋掉系統自動生成的單引號。