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