2011-04-07 43 views
0

我不記得我之前是如何做到這一點的,但我已經完成了這個工作,並想知道是否有人可以幫助我。我如何驗證發送到服務器的密碼?

我使用帶URL中的某些參數的GET請求發佈數據到另一個頁面。我想驗證接收端的參數。上一次我通過添加一個祕密然後對它進行哈希處理,但現在我不記得如何。

+0

驗證究竟是什麼? – deceze 2011-04-07 06:29:01

+0

有一個谷歌CSRF - 它已被覆蓋很多次。注意Chris Schifflett和Stefan Esser的內容(Chris的CSRF重定向器雖然有點狡猾) – symcbean 2011-04-07 08:42:36

回答

2

如果您若參數是從源頭上驗證你打算在他們從何而來,即:如果用戶來到page1.php中我只接收參數這裏就是你要做的

  1. 用戶進入第1頁。 PHP中,會生成一個令牌並將其放置在$ _SESSION中。哈希令牌被添加到page1.php(或鏈接,或其他)的表格
  2. 用戶將參數發送到page2.php。
  3. 您檢查是否有散存在,如果在$ _SESSION的令牌,散列時,如果參數發送等於一個用戶

發送千萬記住,在這種情況下,你只驗證由一個已知​​的來源。一直做輸入驗證,以檢查收到的值是否可接受的值!

0

你可以做的是(你已經說過了)添加一個GET值的散列。這種方法的優點在於,鏈接(如果要發佈)是「完整」的,因爲您不通過活動會話等依賴其他數據。換句話說,鏈接帶有自己的驗證信息。

我會做到這一點,像這樣:

計算哈希

  1. 排序GET鍵和值的數組(因爲參數順序應該被忽略,例如,?a=1&b=2產生相同的散列如?b=2&a=1
  2. 計算用固定鹽前置的陣列的hash,即hashFunc(concat(GETArray, fixedSalt))
  3. 將(2)中的hash添加到GET參數中。

驗證值

  1. 提取hash參數和排序其餘陣列GET鍵和值
  2. 計算散列用於從(1)的有序數組 - 同樣地進行如上面列表中的(2)
  3. 檢查計算出的散列值是否與GET參數中的值匹配。

固定鹽被用於確保,一個知識淵博的人不能「猜測」您的哈希算法,並因此與篡改數據(除非他也知道固定的鹽,當然:))。


示例:a=1b=2

  • 排序後的數組:array('a' => 1, 'b' => 2);
  • 哈希:xyz(通過hashFunc()上的sortedArray的concat和'mySa1t'
  • GET PARAMS:?a=1&b=2&hash=xyz,見http_build_query()
  • ...
  • 哈希:xyz,其餘GET數組排序:array('a' => 1, 'b' => 2);
  • 計算哈希:xyz(通過hashFunc()上的srecievedSortedArray CONCAT和'mySa1t'
  • xyz == xyz,yaj!
+0

聲明:上述步驟有點冗長。根據用於構建鏈接(查詢)和接收數據(GET參數)的方法,某些步驟可能會被忽略。 – jensgram 2011-04-07 06:50:30

0

正如你所看到的,沒有人正在做這樣的「驗證」。

事實上,沒有數據通過網址發送到另一個頁面。在服務器上已經存在的數據上發送一些數據是沒有意義的。

您正在查詢字符串錯誤。它不發送任何數據,它只是識別一些頁面。

整個頁面地址是一個URL,一個頁面的唯一地址。

如果您的服務器上有一個頁面響應某個URL,則不需要此類密封。

而不是這種散列,你必須驗證你的參數。

相關問題