[英]How can I validate a secret sent to a server?
我不記得我之前是怎么做的,但是我已經這樣做了,並且想知道是否有人可以幫助我。
我使用帶有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
(通過sortedArray
和'mySa1t'
concat上的hashFunc()
) ?a=1&b=2&hash=xyz
,參見http_build_query()
xyz
,剩余的GET數組,排序: array('a' => 1, 'b' => 2);
xyz
(通過srecievedSortedArray
和'mySa1t'
concat上的hashFunc()
) xyz
== xyz
,yaj! 如您所見,沒有人進行此類“驗證”。
實際上,沒有數據通過url發送到另一個頁面。 在已經存在的服務器上發送一些數據是沒有意義的。
您正在查詢錯誤的查詢字符串。 它不發送任何數據,它只是識別一些頁面。
整個頁面地址是一個URL,一個頁面的唯一地址。
如果您的服務器上有一個頁面響應某個URL,則不需要這樣的密封。
您必須驗證參數,而不是這樣的哈希。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.