PHP安全-欺騙表單提交
制造一個欺騙表單幾乎與假造一個URL一樣簡單。畢竟,表單的提交只是瀏覽器發(fā)出的一個HTTP請求而已。請求的部分格式取決于表單,某些請求中的數(shù)據(jù)來自于用戶。
大多數(shù)表單用一個相對URL地址來指定action屬性:
<form action='process.php' method='POST'>
當(dāng)表單提交時,瀏覽器會請求action中指定的URL,同時它使用當(dāng)前的URL地址來定位相對URL。例如,如果之前的表單是對http://example.org/path/to/form.php請求的回應(yīng)所產(chǎn)生的,則在用戶提交表單后會請求URL地址http://example.org/path/to/process.php。
知道了這一點,很容易就能想到你可以指定一個絕對地址,這樣表單就可以放在任何地方了:
<form action='http://example.org/path/to/process.php' method='POST'>
這個表單可以放在任何地方,并且使用這個表單產(chǎn)生的提交與原始表單產(chǎn)生的提交是相同的。意識到這一點,攻擊者可以通過查看頁面源文件并保存在他的服務(wù)器上,同時將action更改為絕對URL地址。通過使用這些手段,攻擊者可以任意更改表單,如取消最大字段長度限制,取消本地驗證代碼,更改隱藏字段的值,或者出于更加靈活的目的而改寫元素類型。這些更改幫助攻擊者向服務(wù)器提交任何數(shù)據(jù),同時由于這個過程非常簡便易行,攻擊者無需是一個專家即可做到。
欺騙表單攻擊是不能防止的,盡管這看起來有點奇怪,但事實上如此。不過這你不需要擔(dān)心。一旦你正確地過濾了輸入,用戶就必須要遵守你的規(guī)則,這與他們?nèi)绾翁峤粺o關(guān)。
如果你試驗這個技巧時,你可能會注意到大多數(shù)瀏覽器會在HTTP頭部包括一個Referer信息以標(biāo)識前一個頁面的地址。在本例中,Referer的值是表單的URL地址。請不要被它所迷惑而用它來區(qū)分你的表單提交還是欺騙表單提交。在下一節(jié)的演示中,可以看到HTTP頭部的也是非常容易假造的,而使用Referer來判定的方式又是眾所周知的。
相關(guān)文章:

網(wǎng)公網(wǎng)安備