PHP安全程式設計之關於表單欺騙提交

2021-07-16 09:59:56 字數 744 閱讀 6195

製造乙個欺騙表單幾乎與假造乙個url一樣簡單。畢竟,表單的提交只是瀏覽器發出的乙個http請求而已。請求的部分格式取決於表單,某些請求中的資料來自於使用者。

大多數表單用乙個相對url位址來指定action屬性:

當表單提交時,瀏覽器會請求action中指定的url,同時它使用當前的url位址來定位相對url。例如,如果之前的表單是對請求的回應所產生的,則在使用者提交表單後會請求url位址 

知道了這一點,很容易就能想到你可以指定乙個絕對位址,這樣表單就可以放在任何地方了:

這個表單可以放在任何地方,並且使用這個表單產生的提交與原始表單產生的提交是相同的。意識到這一點,攻擊者可以通過檢視頁面原始檔並儲存在他的伺服器上,同時將action更改為絕對url位址。通過使用這些手段,攻擊者可以任意更改表單,如取消最大字段長度限制,取消本地驗證**,更改隱藏欄位的值,或者出於更加靈活的目的而改寫元素型別。這些更改幫助攻擊者向伺服器提交任何資料,同時由於這個過程非常簡便易行,攻擊者無需是乙個專家即可做到。 

欺騙表單攻擊是不能防止的,儘管這看起來有點奇怪,但事實上如此。不過這你不需要擔心。一旦你正確地過濾了輸入,使用者就必須要遵守你的規則,這與他們如何提交無關。 

如果你試驗這個技巧時,你可能會注意到大多數瀏覽器會在http頭部包括乙個referer資訊以標識前乙個頁面的位址。在本例中,referer的值是表單的url位址。請不要被它所迷惑而用它來區分你的表單提交還是欺騙表單提交。在後面的演示中,可以看到http頭部的也是非常容易假造的,而使用referer來判定的方式又是眾所周知的。

PHP安全程式設計之PHP的安全模式

php的safe mode選項的目的是為了解決本小節前後所述的某些問題。但是,在php層面上去解決這類問題從架構上來看是不正確的,正如php手冊所述 當安全模式生效時,php會對正在執行的指令碼所讀取 或所操作 檔案的屬主進行檢查,以保證與該指令碼的屬主是相同的。雖然這樣確實可以防範本章中的很多例子...

PHP安全程式設計之留心後門URL

後門url是指雖然無需直接呼叫的資源能直接通過url訪問。例如,下面web應用可能向登入使用者顯示敏感資訊 authenticated false authenticated check auth if authenticated 由於sensitive.php位於 主目錄下,用瀏覽器能跳過驗證機制...

PHP安全程式設計之shell命令注入

使用系統命令是一項危險的操作,尤其在你試圖使用遠端資料來構造要執行的命令時更是如此。如果使用了被汙染資料,命令注入漏洞就產生了。exec 是用於執行shell命令的函式。它返回執行並返回命令輸出的最後一行,但你可以指定乙個陣列作為第二個引數,這樣輸出的每一行都會作為乙個元素存入陣列。使用方式如下 l...