XSS(Cross-site Scripting) 공격(Java)을 포착하는 최고의 정규식은 무엇입니까?

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

  •  09-06-2019
  •  | 
  •  

문제

Jeff는 실제로 이에 대해 게시했습니다. HTML을 삭제하세요.하지만 그의 예는 C#에 있고 저는 실제로 Java 버전에 더 관심이 있습니다.더 나은 Java 버전이 있는 사람이 있나요?그의 예는 C#에서 Java로 직접 변환하기에 충분합니까?

[업데이트] 제가 질문했을 때 SO가 오늘만큼 인기가 없었기 때문에 이 질문에 포상금을 걸었습니다(*).보안과 관련된 모든 것은 더 많은 사람들이 조사할수록 좋습니다!

(*) 사실 아직 클로즈베타였던거 같아요

도움이 되었습니까?

해결책

정규식으로는 이 작업을 수행하지 마세요.유효한 HTML에 대해서만 보호하는 것이 아니라는 점을 기억하십시오.웹 브라우저가 생성하는 DOM으로부터 보호하고 있습니다.브라우저는 유효하지 않은 HTML로부터 유효한 DOM을 생성하도록 속일 수 있습니다.

예를 들어 다음 목록을 참조하세요. 난독화된 XSS 공격.실제 공격을 방지하기 위해 정규식을 맞춤화할 준비가 되셨습니까? 야후와 핫메일 IE6/7/8에서?

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS&lt;SCRIPT DEFER&gt;alert(&quot;XSS&quot;)&lt;/SCRIPT&gt;">
</BODY></HTML>

IE6에서 작동하는 이 공격은 어떻습니까?

<TABLE BACKGROUND="javascript:alert('XSS')">

이 사이트에 나열되지 않은 공격은 어떻습니까?Jeff의 접근 방식의 문제점은 주장된 대로 화이트리스트가 아니라는 것입니다.누군가로서 그 페이지 적절하게 메모:

그것의 문제는 HTML이 깨끗해야한다는 것입니다.해킹 된 HTML을 통과 할 수있는 경우가 있으며 일치하지 않으며,이 경우 해킹 된 HTML 문자열을 대체 할 것이 없으므로 반환합니다.이것은 엄격하게 화이트리스트가 아닙니다.

나는 다음과 같은 목적으로 만들어진 도구를 제안하고 싶습니다. 안티사미.실제로 HTML을 구문 분석한 다음 DOM을 탐색하고 DOM에 없는 항목을 제거하는 방식으로 작동합니다. 구성 가능 화이트리스트.가장 큰 차이점은 잘못된 형식의 HTML을 정상적으로 처리하는 능력입니다.

가장 좋은 점은 위 사이트의 모든 XSS 공격에 대해 실제로 단위 테스트를 수행한다는 것입니다.게다가 이 API 호출보다 더 쉬울 수 있는 것은 무엇입니까?

public String toSafeHtml(String html) throws ScanException, PolicyException {

    Policy policy = Policy.getInstance(POLICY_FILE);
    AntiSamy antiSamy = new AntiSamy();
    CleanResults cleanResults = antiSamy.scan(html, policy);
    return cleanResults.getCleanHTML().trim();
}

다른 팁

정규 표현식을 사용하는 것이 모든 의심스러운 코드를 찾는 가장 좋은 방법이라고 확신하지는 않습니다.정규 표현식은 깨진 HTML을 다룰 때 특별히 속이기 쉽습니다.예를 들어 Sanitize HTML 링크에 나열된 정규식은 요소 이름과 속성 'href'사이에 속성이있는 모든 'a'요소를 제거하지 못합니다.

악성 코드를 제거하는보다 강력한 방법은 모든 종류의 HTML 문서 (Tidy, TagSoup 등)를 처리 할 수있는 XML 파서를 사용하고 XPath 표현식으로 제거 할 요소를 선택하는 것입니다.HTML 문서가 DOM 문서로 구문 분석되면 취소 할 요소를 쉽고 안전하게 찾을 수 있습니다.XSLT로도 쉽게 할 수 있습니다.

나는 NoScript 최고의 Anti-XSS 애드온에서 추출했으며 다음은 Regex입니다. 완벽한 작업 : 라코 디스

테스트 : http://regex101.com/r/rV7zK8

정기적으로 업데이트되는 애드온 인 NoScript의 일부이기 때문에 XSS를 99 % 차단한다고 생각합니다

라코 디스

문자, 숫자, 공백 및 <br> 태그의 유효성을 검사합니다. 더 많은 위험을 원한다면 다음과 같은 태그를 더 추가 할 수 있습니다. 라코 디스

jeffs 코드를 사용하는 가장 큰 문제는 현재 사용할 수없는 @입니다.

필요한 경우 jeffs 코드에서 "원시"정규식을 가져 와서 붙여 넣을 것입니다.

http : //www.cis.upenn.edu / ~ matuszek / General / RegexTester / regex-tester.html

탈출이 필요한 것을 탈출하여 사용하는 것을보세요. <시간>

이 정규식의 사용법을 염두에두고 저는 개인적으로 제가 무엇을하고 있었는지, 성공하지 못하면 왜 그리고 어떤 결과가 발생할지 정확히 이해했는지 확인하고 복사 / 붙여 넣기 전에 다른 답변이 도움이되는 것처럼.

(복사 / 붙여 넣기에 대한 적절한 조언입니다.)

[\s\w\.]*.일치하지 않으면 XSS입니다.아마도.이 표현식은 문자, 숫자 및 마침표 만 허용합니다.XSS에 대한 두려움 때문에 모든 기호 (유용한 기호까지 포함)를 피합니다.&를 허용하면 걱정이됩니다.그리고 모든 & 인스턴스를 &amp;로 바꾸는 것만으로는 충분하지 않습니다.신뢰하기에는 너무 복잡합니다 : P.분명히 이것은 많은 합법적 인 텍스트를 허용하지 않을 것입니다 (일치하지 않는 모든 문자를! 또는 다른 것으로 바꿀 수 있습니다).하지만 XSS를 죽일 것이라고 생각합니다.

HTML로 구문 분석하고 새 HTML을 생성하는 것이 더 좋습니다.

오래된 스레드이지만 다른 사용자에게 유용 할 수 있습니다.PHP에 대한 유지 관리 보안 계층 도구가 있습니다. https://github.com/PHPIDS/ 여기에서 찾을 수있는 정규식 집합 :

https://github.com/PHPIDS/PHPIDS/blob / master / lib / IDS / default_filter.xml

이 질문은 계산 이론 연구의 훌륭한 적용을 완벽하게 보여줍니다. 계산 이론은 컴퓨터의 수학적 표현을 생성하는 데 초점을 맞춘 분야입니다.

계산 이론에서 가장 심오한 연구 중 일부는 다양한 언어의 관계를 보여주는 증명입니다.

계산 이론가들이 입증 한 일부 언어 관계는 다음과 같습니다.

여기에 이미지 설명 입력

이것은 문맥 자유 언어가 일반 언어보다 더 강력하다는 것을 보여줍니다. 따라서 언어가 명시 적으로 문맥이없는 경우 (문맥이없고 정규적이지 않음) 모든 정규 표현식이이를 인식 할 수 없습니다.

JavaScript는 최소한 컨텍스트가 자유롭기 때문에 모든 XSS를 포착 할 수있는 정규식 (regex)을 설계하는 것은 불가능한 작업이라는 것을 100 % 확실하게 알고 있습니다.

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