我正在更新我工作的公司中維護的許多子站點使用的經典ASP網頁。使用經典ASP構建「退出」頁面,避免主要的跨站點腳本缺陷
該頁面的目的是通知用戶他們將離開「我們」的網站並轉到另一個網站。這基本上是免責聲明,但由於資源限制和時間限制,我無法將免責聲明添加到我們管理的每個網站。
這是問題的關鍵。當前代碼從查詢字符串中提取變量以在新窗口中創建「continue」鏈接。這顯然會以跨站點腳本的形式產生許多問題。
如何處理這一更新,以消除使用VBScript/ASP的跨站點腳本問題的大部分(如果不是全部)。
我使用的代碼如下。
<%@ Language = vbScript %>
<% Option Explicit %>
<%
Dim strLink
strLink = Request.QueryString("site")
strLink = Replace(strLink, "<", "<")
strLink = Replace(strLink, ">", ">")
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>
如果該鏈接已經在您的網站上,您爲什麼需要清理它? – 2008-10-23 19:56:52
的問題不在於我們添加的鏈接是「壞」那就是我們需要一個門戶網頁,將接受任何URL中傳遞,然後提供所需的免責聲明和轉發用戶一起,如果他們繼續在離開現場的行動。 (這是一個財務網站,很多免責聲明和合法的「東西」來處理)。所以總的問題是任何人都可以將URL(或「壞」腳本)傳遞給頁面,並可能會創建XSS問題。 – Nip 2009-09-09 04:33:31