我不記得我之前是如何做到這一點的,但我已經完成了這個工作,並想知道是否有人可以幫助我。我如何驗證發送到服務器的密碼?
我使用帶URL中的某些參數的GET請求發佈數據到另一個頁面。我想驗證接收端的參數。上一次我通過添加一個祕密然後對它進行哈希處理,但現在我不記得如何。
我不記得我之前是如何做到這一點的,但我已經完成了這個工作,並想知道是否有人可以幫助我。我如何驗證發送到服務器的密碼?
我使用帶URL中的某些參數的GET請求發佈數據到另一個頁面。我想驗證接收端的參數。上一次我通過添加一個祕密然後對它進行哈希處理,但現在我不記得如何。
如果您若參數是從源頭上驗證你打算在他們從何而來,即:如果用戶來到page1.php中我只接收參數這裏就是你要做的
發送千萬記住,在這種情況下,你只驗證由一個已知的來源。一直做輸入驗證,以檢查收到的值是否可接受的值!
你可以做的是(你已經說過了)添加一個GET
值的散列。這種方法的優點在於,鏈接(如果要發佈)是「完整」的,因爲您不通過活動會話等依賴其他數據。換句話說,鏈接帶有自己的驗證信息。
我會做到這一點,像這樣:
計算哈希
GET
鍵和值的數組(因爲參數順序應該被忽略,例如,?a=1&b=2
產生相同的散列如?b=2&a=1
)hashFunc(concat(GETArray, fixedSalt))
hash
添加到GET
參數中。驗證值
hash
參數和排序其餘陣列GET
鍵和值GET
參數中的值匹配。的固定鹽被用於確保,一個知識淵博的人不能「猜測」您的哈希算法,並因此與篡改數據(除非他也知道固定的鹽,當然:))。
示例:a=1
,b=2
array('a' => 1, 'b' => 2);
xyz
(通過hashFunc()
上的sortedArray
的concat和'mySa1t'
)?a=1&b=2&hash=xyz
,見http_build_query()
xyz
,其餘GET數組排序:array('a' => 1, 'b' => 2);
xyz
(通過hashFunc()
上的srecievedSortedArray
CONCAT和'mySa1t'
)xyz
== xyz
,yaj!聲明:上述步驟有點冗長。根據用於構建鏈接(查詢)和接收數據(GET參數)的方法,某些步驟可能會被忽略。 – jensgram 2011-04-07 06:50:30
正如你所看到的,沒有人正在做這樣的「驗證」。
事實上,沒有數據通過網址發送到另一個頁面。在服務器上已經存在的數據上發送一些數據是沒有意義的。
您正在查詢字符串錯誤。它不發送任何數據,它只是識別一些頁面。
整個頁面地址是一個URL,一個頁面的唯一地址。
如果您的服務器上有一個頁面響應某個URL,則不需要此類密封。
而不是這種散列,你必須驗證你的參數。
驗證究竟是什麼? – deceze 2011-04-07 06:29:01
有一個谷歌CSRF - 它已被覆蓋很多次。注意Chris Schifflett和Stefan Esser的內容(Chris的CSRF重定向器雖然有點狡猾) – symcbean 2011-04-07 08:42:36