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)文章:
1. JS中6個對象數(shù)組去重的方法2. Python基于requests庫爬取網(wǎng)站信息3. 資深程序員:給Python軟件開發(fā)測試的25個忠告!4. Python使用Selenium自動進(jìn)行百度搜索的實現(xiàn)5. 一文帶你徹底理解Java序列化和反序列化6. python中文本字符處理的簡單方法記錄7. PHP利用curl發(fā)送HTTP請求的實例代碼8. PHP laravel實現(xiàn)導(dǎo)出PDF功能9. vscode運行php報錯php?not?found解決辦法10. Java commons-httpclient如果實現(xiàn)get及post請求

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