주요 크로스 사이트 스크립팅 함정을 피하는 클래식 ASP를 사용하여 "종료"페이지 구축
-
04-07-2019 - |
문제
저는 내가 일하는 회사에서 유지되는 여러 하위 사이트에서 사용하는 고전적인 ASP 웹 페이지를 업데이트하려고합니다.
페이지의 목적은 사용자에게 "우리의"사이트를 떠나 다른 사이트로 가고 있음을 알리는 것입니다. 기본적으로 면책 조항이지만 리소스 제한과 시간 제한으로 인해 관리하는 모든 사이트에 면책 조항을 추가 할 수 없습니다.
이것이 문제의 요점입니다. 현재 코드는 쿼리 문자열에서 변수를 가져와 새 창에서 "계속"링크를 만듭니다. 이것은 분명히 크로스 사이트 스크립팅 형태로 많은 문제를 만듭니다.
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>
해결책
이것이 제가 HTML 소독에 권장하는 것입니다.
HTML Whitelist는 내 좋은 동료 인 DeWitt Clinton의 "App Engine에서 whrown 앱 엔진에서 whrown"의 최신작입니다.
그것은 한 가지 일을하고 잘합니다. Service HTML을 통과 할 수 있으며 소독된 버전을 반환합니다.
다른 팁
"긍정적 인 보안 모델"의 개념을 따르는 접근 방식을 구현해야합니다. "사이트"변수를 구문 분석하고 허용되지 않는 것을 찾는 것을 쓰지 않고 허용되는 내용에 명시 적으로 준수해야합니다. 이렇게하면 접근 방식이 공격, 특히 예상치 못한 공격에 훨씬 더 탄력적입니다.
Regex를 작성하는 것이 좋습니다.
또한 Michael이 게시 한 웹 서비스는 꽤 멋지지만 허용 가능한지 또는 그러한 일에 의존하지 않는지 평가해야합니다.
URL 또는 IP 주소를 기반으로 사이트 중 하나의 페이지에서만 호출되는지 확인하기 위해 계속 페이지를 계속하기 위해 로직을 추가 할 수 있습니다. 추가 보안을 위해 시간과 해시 코드를 통과 할 수도 있습니다.