2014-12-02 86 views
0

背景:在我的ASP.NET應用程序中,我偶爾需要將用戶通過中間頁面,然後必須重新鏈接到原始請求的頁面。我想保持儘可能多的GET參數。通過登錄頁面在URL中傳遞GET參數的安全性

例如,如果用戶的土地:

  • store.aspx?storeId=34&myHours=12

但我現在認識到用戶需要去中間頁面,因此用戶會被重定向:

  • siteAd.aspx?returnTo=store.aspx&params=storeId%3D34%26myHours%3D12
那麼3210

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

+2

爲什麼不只是URL編碼整個returnTo URL而不是從路徑中拆分查詢字符串?例如'returnTo = store.aspx%3fstoreId%3D34%26myHours%3D12' – 2014-12-02 18:29:16

+0

確保無法寫入「javascript:」或關閉標籤「」「> bla bla .. some js ...」。如果你確定數據是正確的URL編碼,你不應該看到一個問題。 – 2014-12-02 18:49:41

+0

@SamGreenhalgh似乎是避免開放重定向攻擊的最簡單方法。我也看不出這對安全性有什麼幫助。 – patstuart 2014-12-02 20:19:34

回答

1

我想出瞭解決的辦法是進行urlencode(每@SamGreenhalgh)的整個字符串,則使用內置。 NET功能IsWellFormedUriString原因如下:

Private Shared Function isLocalUrl(ByVal sUrl As String) As Boolean 
    If String.IsNullOrWhiteSpace(sUrl) Then 
     Return False 
    End If 

    sUrl = sUrl.Trim 
    Return Uri.IsWellFormedUriString(sUrl, UriKind.Relative) 
End Function 
+0

真的嗎?這在你的腦海裏是安全的嗎? – Chris 2014-12-10 09:34:34

+0

@Chris我認爲這是。 'IsWellFormedUriString'允許一組非常有限的字符。像<<>&'「'這樣的任何HTML字符都是不允許的,所以我不必擔心有人點擊了錯誤的鏈接,並且突然運行注入,或者被髮送到錯誤的站點。 – patstuart 2014-12-10 16:53:18

0

由於@Sam Greenhalgh表示爲什麼不將整個路徑和查詢字符串作爲一個參數傳遞而不是分割。如果它是正確的URL編碼,那麼這將是確定的。

除了開放重定向漏洞,您應該通過檢查lnkContinue.HRef只能設置爲HTTP或HTTPS URL來確保您的代碼免受XSS攻擊。這會阻止某人創建指向您網站的鏈接,其中returnTo包含JavaScript。例如javascript:alert('xss')

Uri obect可以用來驗證returnTo是不是一個開放的重定向或XSS攻擊。可以檢查協議以確保它是HTTP或HTTPS,並且可以檢查Url本身是否是相對URL或它是否是指向您的域的絕對URL。最好使用執行手動字符串比較方法的Url對象。許多開放重定向檢查可能會被攻擊者愚弄,設置域名(如www.example.com.evil.com)以欺騙域名檢查www.example.com或在URL中的其他地方包括www.example.com(例如http://www.evil.com/www.example.com/Page.aspx)。

-1

URL編碼不是一個安全措施,它是微不足道的失敗。防範中間人攻擊的最佳方法是使用具有信譽良好的SSL證書的HTTPS並從GET切換到POST。還有什麼是圍繞這一問題,踮着腳尖(即安全)

另見https://stackoverflow.com/a/1008550/374075

+0

如果您可以提供有關投票的評論,那麼其他人也可以從中受益。或者你是否隨意對人投票?做一個成年人,表現得像一個! – Chris 2014-12-10 09:33:34

+0

對不起,我以爲我評論過,雖然我現在意識到我問過你對這個問題的評論,但你沒有回覆。這裏的威脅與URL中的數據是否被加密無關。 OP關注[Open Redirect](https://www.owasp.org/index.php/Open_redirect)的漏洞以及我在答案([XSS](https://www.owasp。 org/index.php/Cross-site_Scripting_%28XSS%29))不會通過使用SSL來緩解。即使URL是HTTPS,它們仍然是漏洞。 – SilverlightFox 2014-12-10 12:13:22

+0

是的,TLS總是一個好的舉措,可以防止MITMs,我同意你的意見。不幸的是,這不會解決@ pat的問題。 – SilverlightFox 2014-12-10 12:14:36