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。
知道了這一點(diǎn),很容易就能想到你可以指定一個絕對地址,這樣表單就可以放在任何地方了:
<form action='http://example.org/path/to/process.php' method='POST'>
這個表單可以放在任何地方,并且使用這個表單產(chǎn)生的提交與原始表單產(chǎn)生的提交是相同的。意識到這一點(diǎn),攻擊者可以通過查看頁面源文件并保存在他的服務(wù)器上,同時將action更改為絕對URL地址。通過使用這些手段,攻擊者可以任意更改表單,如取消最大字段長度限制,取消本地驗(yàn)證代碼,更改隱藏字段的值,或者出于更加靈活的目的而改寫元素類型。這些更改幫助攻擊者向服務(wù)器提交任何數(shù)據(jù),同時由于這個過程非常簡便易行,攻擊者無需是一個專家即可做到。
欺騙表單攻擊是不能防止的,盡管這看起來有點(diǎn)奇怪,但事實(shí)上如此。不過這你不需要擔(dān)心。一旦你正確地過濾了輸入,用戶就必須要遵守你的規(guī)則,這與他們?nèi)绾翁峤粺o關(guān)。
如果你試驗(yàn)這個技巧時,你可能會注意到大多數(shù)瀏覽器會在HTTP頭部包括一個Referer信息以標(biāo)識前一個頁面的地址。在本例中,Referer的值是表單的URL地址。請不要被它所迷惑而用它來區(qū)分你的表單提交還是欺騙表單提交。在下一節(jié)的演示中,可以看到HTTP頭部的也是非常容易假造的,而使用Referer來判定的方式又是眾所周知的。
相關(guān)文章:
1. ASP中常用的22個FSO文件操作函數(shù)整理2. 無線標(biāo)記語言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁3. ASP調(diào)用WebService轉(zhuǎn)化成JSON數(shù)據(jù),附j(luò)son.min.asp4. .Net core 的熱插拔機(jī)制的深入探索及卸載問題求救指南5. SharePoint Server 2019新特性介紹6. html清除浮動的6種方法示例7. asp的SQL語句中and和or同時使用的注意事項(xiàng)8. 讀大數(shù)據(jù)量的XML文件的讀取問題9. ASP.NET Core 5.0中的Host.CreateDefaultBuilder執(zhí)行過程解析10. React+umi+typeScript創(chuàng)建項(xiàng)目的過程
