2008-10-23 18 views
0

我正在更新我工作的公司中維護的許多子站點使用的經典ASP網頁。使用經典ASP構建「退出」頁面,避免主要的跨站點腳本缺陷

該頁面的目的是通知用戶他們將離開「我們」的網站並轉到另一個網站。這基本上是免責聲明,但由於資源限制和時間限制,我無法將免責聲明添加到我們管理的每個網站。

這是問題的關鍵。當前代碼從查詢字符串中提取變量以在新窗口中創建「continue」鏈接。這顯然會以跨站點腳本的形式產生許多問題。

如何處理這一更新,以消除使用VBScript/ASP的跨站點腳本問題的大部分(如果不是全部)。

我使用的代碼如下。

<%@ Language = vbScript %> 
<% Option Explicit %> 

<% 
Dim strLink 
strLink = Request.QueryString("site") 
strLink = Replace(strLink, "<", "&lt") 
strLink = Replace(strLink, ">", "&gt;") 
strLink = Replace(strLink, chr(34), "") 
strLink = Replace(strLink, "script", "", 1, -1, 1) 
strLink = Replace(strLink, "onclick", "", 1, -1, 1) 
strLink = Replace(strLink, "ondblclick", "", 1, -1, 1) 
strLink = Replace(strLink, "onmousedown", "", 1, -1, 1) 
strLink = Replace(strLink, "onmouseover", "", 1, -1, 1) 
strLink = Replace(strLink, "onmousemove", "", 1, -1, 1) 
strLink = Replace(strLink, "onmouseout", "", 1, -1, 1) 
strLink = Replace(strLink, "onkeypress", "", 1, -1, 1) 
strLink = Replace(strLink, "onkeydown", "", 1, -1, 1) 
strLink = Replace(strLink, "onkeyup", "", 1, -1, 1) 
strLink = Replace(strLink, "onfocus", "", 1, -1, 1) 
strLink = Replace(strLink, "onblur", "", 1, -1, 1) 
strLink = Replace(strLink, "&&", "") 
strLink = Replace(strLink, "##", "") 
strLink = Replace(strLink, "&#", "") 
%> 

<a href="<%= strLink %>">Continue</a> 
+0

如果該鏈接已經在您的網站上,您爲什麼需要清理它? – 2008-10-23 19:56:52

+0

的問題不在於我們添加的鏈接是「壞」那就是我們需要一個門戶網頁,將接受任何URL中傳遞,然後提供所需的免責聲明和轉發用戶一起,如果他們繼續在離開現場的行動。 (這是一個財務網站,很多免責聲明和合法的「東西」來處理)。所以總的問題是任何人都可以將URL(或「壞」腳本)傳遞給頁面,並可能會創建XSS問題。 – Nip 2009-09-09 04:33:31

回答

1

這是我推薦的HTML消毒 -

HTML白名單是由我的好同事德威特·克林頓的「泛起了在App Engine上清涼的Python Web服務」的最新產品。

它做了一件事,它做得很好。您可以傳遞服務HTML,它會返回一個消毒版本。

http://html-whitelist.appspot.com/

+0

雖然我本來讚賞布萊恩爾德的是對我最好的答案迴應,我已經認識到,在這個回答中列出Web服務實際上爲我提供的回答我的問題。我會說布賴恩的迴應是更廣泛的方法解決方案,更適用於更多的用戶。 – Nip 2009-09-09 04:28:53

2

您需要實現以下「積極的安全模式」的概念的方法。你應該解析「站點」變量,並確保它明確地符合允許的內容,而不是寫一些看起來應該被禁止的內容。這會讓你的攻擊更具彈性,尤其是未曾預料的攻擊。

我建議編寫一個正則表達式(或者詢問如何在stackoverflow上編寫這樣的正則表達式)。

此外,雖然張貼邁克爾的Web服務是很酷,你應該是否接受或不採取這樣的事情的依賴性評估。

0

你可以添加邏輯繼續頁面,以確保它僅由一個網頁叫上你的網站之一或者基於URL或IP地址。您還可以傳遞時間和哈希代碼以增加安全性。