2017-07-19 35 views
0

我目前工作的一個在線商店網站通過ASP.NET MVC框架5,但下面是討厭我網站識別用戶沒有cookies和IP在服務器端

要求&方法

之一要求是服務器應該假設客戶端的Cookie功能被禁用,因此我們決定爲每個用戶(如果沒有有效的GUID存在)生成GUID,而不是使用cookie/session來標識用戶,則將GUID附加到每個超鏈接並使用檢索到的GUID作爲UID。

形勢

系統工作正常,在這一點上,直到我們增加了一個驗證它。我們希望避免客戶端A竊取客戶端B的GUID(這很容易,因爲GUID在URL中可見並且SSL無法做到),則客戶端A使用客戶端B GUID將項目添加到購物車,並等待客戶B爲其付款(請忽略客戶B是否查看購物車或送貨地址)。

問題

我們所做的工作,以避免上述的手段是增加從HTTP請求頭,如用戶IP,用戶代理,接受語言等一些信息。我們驗證每個請求的信息,對待如果任何信息發生更改,GUID將視爲無效。

問題是我們發現我們地區的一些ISP會通過不同的IP發送每個請求,因此用戶將在每個頁面/請求中獲得不同的GUID。

似乎不無IP,以便安全作爲標識符的一部分,我們正在尋找一些其他的解決辦法,以確保我們的客戶,我已經在一些研究完成,以下是一些可能的解決方案:

  • 使用ETAG,但我不太明白,但它似乎不太適合我們的項目(在MVC操作中,我們只能知道這是來自請求頁面的客戶端的第一次訪問,如果有效的客戶端訪問新頁面如ConfirmOrder將被視爲無效)
  • 通過在請求標頭中包含標識信息來使用基本授權,但是爲了增加在用戶體驗中,我們不希望用戶輸入用戶名/密碼,但似乎我們不能從服務器端分配默認身份。

任何解決方案/建議/線索將受到歡迎,感謝您的時間

回答

-1

你能使用cookie,只有退回到GUID +硬驗證,如果餅乾失敗?

或者,您可以將每個請求作爲AJAX請求執行,只需將entiere頁面替換爲答案並通過history.pushState()更新URL(減去GUID)即可。這也被稱爲PJAX。但是,當cookies不被允許時,JavaScript也可能被阻止。

我也看到應用程序做每個請求作爲POST,因此隱藏每個參數。但是,這也會使頁面重新加載或通過後退按鈕進行導航,使用戶更難。

+0

嗨Björn,我寧願不使用後備方法,因爲我們假設所有客戶端都禁用了Cookie功能。我們確實需要JavaScript來訪問該站點,但PJAX解決方案仍然在第一頁後顯示GUID(從第二頁開始,每個鏈接將附加GUID)。對於POST部分,我們同意爲用戶提供後退按鈕。感謝您的建議! –

+0

您不必使用PJAX解決方案向用戶顯示GUID。你只需要將它保存到一個JavaScript變量(或localstorage,這將非常類似於cookie)並將其附加到AJAX調用中的鏈接。如果您無法在服務器端執行此操作,則還可以使用JavaScript從頁面上的所有鏈接中刪除GUID。 –

+0

對不起,我們有一組嵌入到每個頁面的日誌(以研究用戶行爲等),每個日誌都使用GUID作爲文件名。 –

相關問題