# 製造一個欺騙表單幾乎與假造一個URL一樣簡單。畢竟,表單的提交只是瀏覽器發出的一個HTTP請求而已。請求的部分格式取決於表單,某些請求中的資料來自使用者。
大多數表單都用一個相對URL位址來指定action屬性:
<form action="process.php" method="POST">
當表單提交時,瀏覽器會請求action中指定的URL,同時它使用目前的URL位址來定位相對URL。例如,如果先前的表單是對http://www.php.cn/請求的回應所產生的,則在使用者提交表單後會請求URL位址http://www.php.cn/。
知道了這一點,很容易就能想到你可以指定一個絕對地址,這樣表單就可以放在任何地方了:
<form action="http://example.org/path/to/process.php" method="POST">
#
這個表單可以放在任何地方,並且使用這個表單產生的提交與原始表單產生的提交是相同的。意識到這一點,攻擊者可以透過查看頁面來源檔案並保存在他的伺服器上,同時將action變更為絕對URL位址。透過使用這些手段,攻擊者可以任意更改表單,例如取消最大欄位長度限制,取消本機驗證程式碼,更改隱藏欄位的值,或出於更靈活的目的而改寫元素類型。這些變更可協助攻擊者向伺服器提交任何數據,同時由於這個過程非常簡單易行,攻擊者無需是專家即可做到。
欺騙表單攻擊是不能防止的,儘管這看起來有點奇怪,但事實上如此。不過這你不需要擔心。一旦你正確地過濾了輸入,使用者就必須遵守你的規則,這與他們如何提交無關。
如果你試驗這個技巧時,你可能會注意到大多數瀏覽器會在HTTP頭部包含一個Referer資訊以識別前一個頁面的位址。在本例中,Referer的值是表單的URL位址。請不要被它所迷惑而用它來區分你的表單提交還是欺騙表單提交。在下一節的示範中,可以看到HTTP頭的也是非常容易偽造的,而使用Referer來判定的方式又是眾所周知的。
以上就是PHP安全-欺騙表單提交的內容,更多相關內容請關注PHP中文網(www.php.cn)!