DB에 보관하기 전에 또는 렌더링하기 전에 HTML을 소독합니까? (ASP.NET의 Antixss 라이브러리)
-
20-09-2019 - |
문제
사용자가 데이터베이스에 저장되고 웹 페이지에 렌더링되는 HTML을 추가 할 수있는 편집기가 있습니다. 이것은 신뢰할 수없는 입력이므로 사용할 계획입니다. Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment
HTML을 소독합니다.
- 데이터베이스에 저장하기 전에 또는 신뢰할 수없는 입력을 웹 페이지에 렌더링하기 전에 산티 화해야합니까?
- DLL 대신 내 프로젝트에 Antixss 소스 코드를 포함시키는 데 이점이 있습니까? (아마도 흰색 목록을 사용자 정의 할 수 있습니까?)
- getSafehtmlfragment의 실제 구현을 위해 어떤 클래스 파일을 찾아야하는지
해결책
나는 두 가지 이유로 선택된 답변에 동의하지 않습니다
- 인코딩 된 데이터를 저장 한 경우 저장하기 전에 인코더를 선택해야합니다. HTML로서 무언가를 저장했지만 JSON 응답 또는 XML 문서의 일부로 다른 형식으로 푸시하려는 경우 어떻게됩니까? 이제 Decode에 대한 HTML 인코딩 형식이있어서 올바른 형식으로 인코딩해야합니다.
- 인코더에서 버그를 발견하고 새 버전을 푸시하면 어떻게됩니까? 이제 출력 지점에서 인코딩하지 않기 때문에 모든 이전 데이터에는 잘못 인코딩 된 것들이 포함될 수 있습니다. 다시 인코딩 할 수는 있지만 올바르게 필터링 할 수있는 이중 인코딩 문제를 누르십시오.
일반적으로 출력 지점에서 인코딩하고 데이터 저장소에서 나오는 데이터를 기본적으로 신뢰할 수없는 것으로 처리합니다. 결국 누군가가 데이터베이스를 직접 또는 SQL 주입을 통해 편집 할 경우 어떻게해야합니까?
다른 팁
말을 듣습니다 XSS의 Jeff Williams와 OWASP 팟 캐스트 67. 그는 저장 전에 소독하거나 인코딩하지 않는 것에 대해 이야기합니다. 주된 이유는 새로운 취약점에 응답하여 (시기) 라이브러리가 진화하는 경우 이전 버전에 데이터가 멈출 수 있기 때문입니다. 물론 이것은 진입 점에서 화이트리스트에 대한 입력을 실행하는 것을 막고 허용 가능한 범위 외부의 것을 거부하지 않습니다.
- 둘 다
- 당신이 그것을 변경할 계획 인 경우에만 개인적으로하지 않을 것입니다.
- Antixss 클래스 (AS라고 불리기 때문에
AntiXss.GetSafeHtmlFragment()
)
페이지 지시서에서 매개 변수를 사용할 수 있습니다. validateRequest = "true". 이러한 방식으로 모든 요청 데이터가 검증되며 유효성 검사 문제가 있으면 언제든지 오류를 포착 할 수 있습니다. 또한 SQL 주입 스레드와 다른 XSS뿐만 아니라 다른 것들을 방지합니다.
숫자 데이터를 사용하면 int32.tryparse () 또는 다른 tryparse 제품군 (byte.tryparse int16.tryparse ...)을 사용하여 정수 오버플로 또는 오용을 검증 할 수 있습니다.
다른 클래스 또는 추가 소독제 방법을 사용할 필요가 없습니다.