背景:在我的ASP.NET應用程序中,我偶爾需要將用戶通過中間頁面,然後必須重新鏈接到原始請求的頁面。我想保持儘可能多的GET參數。通過登錄頁面在URL中傳遞GET參數的安全性
例如,如果用戶的土地:
store.aspx?storeId=34&myHours=12
但我現在認識到用戶需要去中間頁面,因此用戶會被重定向:
siteAd.aspx?returnTo=store.aspx¶ms=storeId%3D34%26myHours%3D12
siteAd.aspx.vb將代碼向用戶返回到原始頁面(僞):
Dim sReturnTo = Request.QueryString("returnTo")
' <insert code to protect against open-redirection attack on sReturnTo>
lnkContinue.HRef = sReturnTo & "?" & Request.QueryString("params")
問題:是否存在上述情形的任何安全問題,只要我保證在returnTo
參數中防止open-redirection vulnerability?
爲什麼不只是URL編碼整個returnTo URL而不是從路徑中拆分查詢字符串?例如'returnTo = store.aspx%3fstoreId%3D34%26myHours%3D12' – 2014-12-02 18:29:16
確保無法寫入「javascript:」或關閉標籤「」「> bla bla .. some js ...」。如果你確定數據是正確的URL編碼,你不應該看到一個問題。 – 2014-12-02 18:49:41
@SamGreenhalgh似乎是避免開放重定向攻擊的最簡單方法。我也看不出這對安全性有什麼幫助。 – patstuart 2014-12-02 20:19:34