주요 크로스 사이트 스크립팅 함정을 피하는 클래식 ASP를 사용하여 "종료"페이지 구축

StackOverflow https://stackoverflow.com/questions/231204

문제

저는 내가 일하는 회사에서 유지되는 여러 하위 사이트에서 사용하는 고전적인 ASP 웹 페이지를 업데이트하려고합니다.

페이지의 목적은 사용자에게 "우리의"사이트를 떠나 다른 사이트로 가고 있음을 알리는 것입니다. 기본적으로 면책 조항이지만 리소스 제한과 시간 제한으로 인해 관리하는 모든 사이트에 면책 조항을 추가 할 수 없습니다.

이것이 문제의 요점입니다. 현재 코드는 쿼리 문자열에서 변수를 가져와 새 창에서 "계속"링크를 만듭니다. 이것은 분명히 크로스 사이트 스크립팅 형태로 많은 문제를 만듭니다.

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>
도움이 되었습니까?

해결책

이것이 제가 HTML 소독에 권장하는 것입니다.

HTML Whitelist는 내 좋은 동료 인 DeWitt Clinton의 "App Engine에서 whrown 앱 엔진에서 whrown"의 최신작입니다.

그것은 한 가지 일을하고 잘합니다. Service HTML을 통과 할 수 있으며 소독된 버전을 반환합니다.

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

다른 팁

"긍정적 인 보안 모델"의 개념을 따르는 접근 방식을 구현해야합니다. "사이트"변수를 구문 분석하고 허용되지 않는 것을 찾는 것을 쓰지 않고 허용되는 내용에 명시 적으로 준수해야합니다. 이렇게하면 접근 방식이 공격, 특히 예상치 못한 공격에 훨씬 더 탄력적입니다.

Regex를 작성하는 것이 좋습니다.

또한 Michael이 게시 한 웹 서비스는 꽤 멋지지만 허용 가능한지 또는 그러한 일에 의존하지 않는지 평가해야합니다.

URL 또는 IP 주소를 기반으로 사이트 중 하나의 페이지에서만 호출되는지 확인하기 위해 계속 페이지를 계속하기 위해 로직을 추가 할 수 있습니다. 추가 보안을 위해 시간과 해시 코드를 통과 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top