제 동료들과 저는 XSS 공격으로부터 자신을 가장 잘 보호하는 방법을 논의 해 왔지만 HTML 문자를 그대로 유지하여 우리 소프트웨어의 필드에 을 입력하십시오.입력 된 데이터를 보존하면서 XSS에서 ASP .NET 웹 응용 프로그램을 보호하는 방법은 무엇입니까?
나에게 이상적인 솔루션은 사용자가 입력 할 때 데이터를 받아들이는 것입니다 (ASP .NET 요청 유효성 검사를 해제하십시오). 정확히 입력 한대로 데이터베이스에 던져주십시오. 그런 다음 웹에 웹에 데이터를 표시 할 때마다 HTML로 인코딩하십시오. 이 접근 방식의 문제점은 언젠가 어느 날 개발자가 언젠가 잊을 가능성이 높은 가능성이 있다는 것입니다. 어딘가에서 값을 HTML로 인코딩해야합니다. 빵! XSS 취약점.
제안 된 또 다른 해결책은 의 요청 유효성 검사를 해제하고 정규식을 사용하여 데이터베이스에 저장되기 전에 사용자가 입력 한 HTML 사용자를 제거하는 것입니다. Devs는 여전히 디스플레이 용으로 HTML 인코딩을해야합니다 ( ).하지만 dev가 잊어 버린 경우라도 HTML 태그를 제거 했으므로 라고 생각하면 안전 할 거라고 생각합니다. 이 단점은 사용자가 명시 적으로 원하는 경우에도 HTML 태그를 설명 및 입력란에 입력 할 수 없거나 실수로 으로 둘러싸인 이메일 주소에 붙여 넣을 수 있으며 정규식이 선택되지 않는다는 것입니다. 그게 .. 뭐든간에. 그것 데이터와 나사, 그리고 이상적 아니에요.
우리가 염두에 두어야 할 또 다른 문제는 시스템이 에 관한 한 두 가지 전략에 대한 공약에 지어진 것입니다. 그리고 한 번에 일부 devs는 가 데이터베이스에 입력되기 전에 HTML 인코딩 데이터에 일부 페이지를 썼습니다. 따라서 일부 데이터는 이미 데이터베이스에 인코딩 된 HTML 일 수 있습니다. 일부 데이터는 그렇지 않습니다. 은 브라우저에서 표시 용으로 안전하게 데이터베이스에서 오는 모든 데이터를 실제로 신뢰할 수 없습니다.
제 질문은 : 처음부터 ASP .NET 웹 응용 프로그램을 구축하는 것이 이상적인 솔루션 일 것이고, 우리의 상황에서 우리에게 좋은 접근 방법은 무엇이겠습니까?