來自POST資料的身份驗證

到目前為止,為了避免$_POST是來自網路上機器人的隨意滲透,進而導致資料庫資料毀損,我一般會先判斷是不是登入的會員。不過,突然來的一個靈感:如果要做破壞的人並不是隨意搜尋目標,而是有心人,其實是可能先註冊一個會員身份,然後在登入會員後,再利用同一個瀏覽器session進行資料的POST測試,那麼前述提到的判斷就不足夠了。

先說明一下,在先前的工作經驗中,有遇過網路上的機器人隨意POST資料,結果導致資料庫的資料毀損,那時候的狀況還不是因為判斷身份的作法產生問題,其實也正確的判斷出使用者的非法身份,但在判斷出非法身份後會以header()進行轉頁,但header之後並沒有接exit或die,結果後續的語法還是有繼續執行,所以原本邏輯裡不該執行的語法還是執行了,和上述的狀況還是不太一樣。

也就是說除了會員身份的確認之外,尚需要其他驗證的條件。一般我們會看到的作法就是像驗證碼之類的東西,但為了簡化使用者的操作,這種驗證碼的機制需要再做一點調整,由原本使用者輸入,變成背景自動判斷。我想到可以利用類似公開金鑰加密的方式,例如,在表單裡加入一個隱藏欄位,內容值是隨機字串,長度可以長一點,然後存到session裡備用。等到使用者送出表單之後,由這個隨機字串的全部或隨機挑幾個字元出來和session比對,比對正確的才是合法使用者POST過來的資料。

另外,比對不成功的,全部記下ip,然後封鎖個一小時,這樣對方就很難持續做嘗試。

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design