src와 같은 속성에서 XSS 공격으로부터 어떻게 보호합니까?

c# html-agility-pack security xss

문제

그래서 나는 화이트리스트로 html 민첩성을 사용하여 C # html 살균제를 만들었습니다. 다음과 같은 경우를 제외하고는 정상적으로 작동합니다.

<img src="javascript:alert('BadStuff');" />
<img src="jav&#x09;ascript:alert('BadStuff');"> 

src 속성을 허용하고 싶습니다. 분명히 악의적 인 내용은 아닙니다. 내가 찾은 모든 것들은 태그와 속성을위한 화이트리스트를 추천했다. 어떻게 이렇게 처리할까요? 나는 이것이 어떤 새로운 브라우저에서도 작동하지 않을 것이지만 나는 보안에 익숙하지 않고 공격자가 할 수있는 다른 영리한 것들이있을 것이라고 확신한다.

수락 된 답변

XSS (Cross-Site Scripting) 공격은 클라이언트 쪽 스크립트 코드를 주입하여 웹 페이지 유효성 검사의 취약점을 악용합니다. 웹 응용 프로그램이 사이트 간 스크립팅 공격에 취약 해지는 일반적인 취약점으로는 입력의 유효성을 제대로 검사하지 못하거나 출력을 인코딩하지 못하고 공유 데이터베이스에서 검색 한 데이터를 신뢰하는 경우가 있습니다. 사이트 간 스크립팅 공격으로부터 응용 프로그램을 보호하려면 모든 입력이 악의적이라고 가정합니다. 모든 입력을 제한하고 유효성을 검사합니다. 잠재적으로 HTML 문자를 포함 할 수있는 모든 출력을 인코딩합니다. 여기에는 파일 및 데이터베이스에서 읽은 데이터가 포함됩니다.

공격자가 신뢰할 수있는 사이트에 대한 액세스를 제공하는 인증 쿠키를 검색하기 위해 스크립트를 작성한 다음 공격자가 알고있는 웹 주소에 쿠키를 게시하면 사이트 간 스크립팅 공격의 가장 심각한 예가 발생합니다. 이를 통해 공격자는 합법적 인 사용자의 신원을 스푸핑하고 웹 사이트에 대한 불법적 인 액세스를 얻을 수 있습니다.

웹 응용 프로그램이 사이트 간 스크립팅 공격에 취약 해지는 일반적인 취약점은 다음과 같습니다.

  • 입력을 제한하고 유효성을 검사하는 데 실패했습니다.
  • 출력을 인코딩하지 못했습니다.
  • 공유 데이터베이스에서 검색된 데이터 신뢰.

지침

사이트 간 스크립팅 공격을 방지하기위한 가장 중요한 두 가지 대책은 다음과 같습니다.

  • 입력을 제한하십시오.
  • 출력 인코딩.

단계 요약

사이트 간 스크립팅을 방지하려면 다음 단계를 수행하십시오.

1 단계. ASP.NET 요청 유효성 검사가 사용되는지 확인합니다.

2 단계. HTML 출력을 생성하는 ASP.NET 코드를 검토합니다.

단계 3. HTML 출력에 입력 매개 변수가 포함되는지 확인하십시오.

4 단계 . 잠재적으로 위험한 HTML 태그 및 속성을 검토하십시오.

5 단계 . 대책을 평가하십시오.

자세한 내용은 2 차 참조를 참조하십시오.

참고 문헌 :

교차 사이트 스크립팅 설명 : XSS 공격을 방지하는 방법

How To : ASP.NET에서 교차 사이트 스크립팅 방지


인기 답변

입력을 적절하게 위생 처리하고 처리하는 경우 src 특성을 허용 할 수 있습니다. 이렇게하려면 유효한 URL 문자의 화이트리스트를 통해 먼저 위생 처리를하고 정규화 한 다음 올바른 이미지를 가리키는 지 확인해야합니다.

언급 한 허용 목록은 첫 번째 단계입니다 (그리고 중요한 단계). 화이트리스트를 구현하려면 URL에 유효하지 않은 모든 문자를 제거하십시오. 또한 URL이 올바르게 구성되어 있는지, 즉 사용자가 액세스 할 수있는 유효한 리소스를 가리키는 지 확인하십시오. 예를 들어, 사용자는 file://sensitive.txt 또는 뭔가를 전달하여 서버의 로컬 파일에 액세스하면 file://sensitive.txt . http 또는 https 만 사용해야하는 프로토콜 인 경우 해당 URL로 시작해야합니다. 당신이 여분의 편집증 환자라면, 그것은 그것이 변조 된 것이 명백하기 때문에 요청을 모두 거절 할 수 있습니다. 허용 목록 작성은 중요하지만 허용 목록 작성만으로는 기능을 안전하게 유지할 수 없습니다 .

정규화는 중요한데, 그 이유는 결국 많은 URL이 사용자를 특정 위치로 이동시키는 URL 제출에 의존하기 때문에 공격을하지 않아야한다는 컴퓨터의 타고난 부족을 남용 할 수 있기 때문입니다. 이것은 동일한 리소스에 중복 된 경로를 제거하여 성능을 향상시키는 데 도움이됩니다 (또는 마지막으로 체크 한 이후로 변경되지 않은 알려진 파일을 다시 검사하지 않음으로써 성능을 향상시킬 수는 있습니다). 마지막으로 수정 한 날짜를 스푸핑하여 공격자가 악의적 인 파일을 이미 "확인하고 트러스트 한"후 스왑 할 수 있습니다.

유효한 이미지를 가리키고 있는지 확인하려면 파일을 열고 처음 몇 바이트를 읽으십시오. 간단하지만 첫 번째 (보안 성능 및 용) 파일을 열기 전에 그것을 확인합니까, 파일 확장자를 신뢰하지 마십시오. 모든 이미지 형식에는 확인할 수있는 특정 패턴의 패턴이 있습니다. 우선 좋은 것은 JPEG 입니다. 악의적 인 사용자가 적절한 헤더를 포함하고있는 이미지 파일에 쉘 코드 또는 다른 공격 코드를 넣는 것은 여전히 ​​가능할 수 있지만 그렇게하기는 훨씬 어렵습니다. 이것은 성능 병목이 될 것이므로이를 구현하면 적절하게 계획하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.