2013-07-03 19 views
0

我有一些情況下需要將URL放入網頁中,點擊該網頁時,會觸發服務器上的一些處理代碼。我當然希望防止隨意壞人從構建自己的網址,並做的事情,他們不應該,所以我有這個計劃的工作,從東西我已經看到在其他網站上逆向工程:正確使用md5祕密來確認URL請求的正確性?何時清除祕密?

  • 化妝唯一的字符串(我使用MD5,但無疑還有其他選項)
  • 把這個字符串轉換成適當命名的會話變量
  • 包含在URL字符串,可能像/do_this/123/FABDYFYEYYDFBDHDFS
  • 的處理代碼運行時,從url中提取字符串並將其與會話變量的值進行比較 - 如果匹配,我們應該是安全的繼續。如果沒有,請做其他事情。

對於我來說,除了用戶的瀏覽器的會話存儲空間中沒有更長的相關會話變量的部分之外,這對我來說還是行得通的。有些情況下,我可以(並且確實)在完成我正在做的事情後刪除會話變量,但並非總是如此。我可能會更聰明地找到機會來清除舊的變量,但問題似乎一般,以至於可能有更好的方法來做到這一點(即我所提出的可能對任何數字都很愚蠢我沒有想到的原因)。有沒有任何建議可以做出這樣的事情?

+0

如果你可以驗證URL的正確性(就像你在第一頁中所做的那樣,否則如何可以你知道md5的URL?),那爲什麼不在第二頁上計算呢? –

+0

見下文,我認爲 –

回答

1

我可能會誤解這個問題,但我不確定爲什麼您需要將唯一字符串存儲在會話變量/ cookie中。爲什麼不做這樣的事情:

  • 使用<a>標記或任何地方的祕密字符串呈現頁面。
  • 將該字符串存儲爲「okay」服務器端。
  • 當字符串用於觸發事件時,使其無效。如果你的鏈接導致頁面重新加載,這可以自動工作,但也可以通過AJAX或其他方式實現。
+0

我需要在服務器端存儲字符串* somewhere *以便能夠在嘗試執行事件時執行測試;我偶然使用會話變量,因爲很容易。我可以用某種特定於用戶的方式將它寫入我的數據庫,但這並不能解決字符串何時可以安全刪除的問題。正如你注意到的,在某些情況下,我一直在刪除它,當我可以確定我已經完成了它,但還有其他時間(無頁面重新加載),當這不起作用時。但...(見下一評論) –

+0

......也許我做錯了這個?我使用md5來生成一個隨機的,可能是唯一的字符串;也許正確的做法是,在頁面創建時,建立一個有意義的字符串(用戶名,操作名稱,時間,隨機)並對其進行加密;然後我可以在事件測試中解密它。這樣我就不需要會話變量或其他任何東西,儘管如果我想將它限制爲一次性使用,我需要某種存儲。我想.... –

+0

一般來說,我會建議不要構建「有意義」的字符串,因爲它們本質上更容易被猜測(即使您「加密」它)。當我做會話密鑰等事情時,我通常只會從**密碼安全的**隨機數發生器(** not **'rand'或'mt_rand')獲取32個字節或其他內容,然後將其轉換爲十六進制,並且然後發送。至於存儲,是的,你需要存儲字符串服務器端,但**不**客戶端(除了在頁面源),如你最初所說(*「...用戶的瀏覽器的會話存儲空間不足......「)* – CmdrMoozy