我正在使用JavaScript將值傳遞給另一個頁面的URL。我應該採取哪些安全措施以便不會以不好的方式操縱?將值傳遞給URL,安全措施
下面是我在做什麼:
window.location = "post.php?value=" + $("input").val();
謝謝!
我正在使用JavaScript將值傳遞給另一個頁面的URL。我應該採取哪些安全措施以便不會以不好的方式操縱?將值傳遞給URL,安全措施
下面是我在做什麼:
window.location = "post.php?value=" + $("input").val();
謝謝!
您可以做的唯一的事情是實施一個合適的&完整的服務器端驗證,以根除無效值。
,切勿從客戶端相信任何總是做服務器端驗證
我同意,有點開玩笑......這也是從客戶那裏獲得簽署合同的原因。 +1 – RacerNerd
這是很難說你想什麼,以確保打擊,但我建議如果可能的話以下。
任何時候你有一個可以被用戶操縱的值,服務器端檢查該值。這不僅限於用戶輸入的值,但任何聰明人都可以在代碼中或通過其他方式進行更改。最好的檢查方式是將其限制在一個確切的已知值。如果它不完全匹配,請不要使用它。
根據您處理的數據,有問題的字符的鬆散服務器端篩選器可能是可以接受的,而不是限制爲嚴格的精確值。
從發送端,確保值被編碼。 URL編碼和轉義字符,如「&」,「+」,「/」等。這是更正確的比安全。
然後在接收端,確保發送的值沒有調和。您應該「清理」投入,以便消除注入風險。另外,您可以使用salted hash或「私鑰」來驗證該值。我們選擇關鍵字「abc」。
發件人正在發送的值123,但它也將發送一個認證令牌:
?value=abc&auth=XXXX
其中XXXX作爲MD5( 'ABC123')來計算;
接收端也知道這個共享密鑰'abc',所以它比較自己的哈希計算與聲明的$ auth值。
如果該值被調和,哈希將被不同地計算,並且接收方可以拒絕這樣的請求。這種技術在跨服務器/ RPC服務中很常見。
希望這會有所幫助。
您永遠不能相信客戶端的URL,_period_。如果這是一個潛在的問題,那麼您的設計就會被破壞。 – SLaks
@SLaks如何將一個值傳遞給另一個不需要驗證的頁面? – Bagwell
如果值是從客戶端發送的,則傳遞值總是需要驗證。有可能您在服務器端的頁面之間傳遞值,這可以在會話中完成。如果放入會話中的值沒有以任何方式連接到用戶輸入,那麼可能不需要驗證它們,但在這裏看起來並不是這樣。 – RacerNerd