2011-03-09 3 views
0

제 동료들과 저는 XSS 공격으로부터 자신을 가장 잘 보호하는 방법을 논의 해 왔지만 HTML 문자를 그대로 유지하여 우리 소프트웨어의 필드에 을 입력하십시오.입력 된 데이터를 보존하면서 XSS에서 ASP .NET 웹 응용 프로그램을 보호하는 방법은 무엇입니까?

나에게 이상적인 솔루션은 사용자가 입력 할 때 데이터를 받아들이는 것입니다 (ASP .NET 요청 유효성 검사를 해제하십시오). 정확히 입력 한대로 데이터베이스에 던져주십시오. 그런 다음 웹에 웹에 데이터를 표시 할 때마다 HTML로 인코딩하십시오. 이 접근 방식의 문제점은 언젠가 어느 날 개발자가 언젠가 잊을 가능성이 높은 가능성이 있다는 것입니다. 어딘가에서 값을 HTML로 인코딩해야합니다. 빵! XSS 취약점.

제안 된 또 다른 해결책은 의 요청 유효성 검사를 해제하고 정규식을 사용하여 데이터베이스에 저장되기 전에 사용자가 입력 한 HTML 사용자를 제거하는 것입니다. Devs는 여전히 디스플레이 용으로 HTML 인코딩을해야합니다 ( ).하지만 dev가 잊어 버린 경우라도 HTML 태그를 제거 했으므로 라고 생각하면 안전 할 거라고 생각합니다. 이 단점은 사용자가 명시 적으로 원하는 경우에도 HTML 태그를 설명 및 입력란에 입력 할 수 없거나 실수로 으로 둘러싸인 이메일 주소에 붙여 넣을 수 있으며 정규식이 선택되지 않는다는 것입니다. 그게 .. 뭐든간에. 그것 데이터와 나사, 그리고 이상적 아니에요.

우리가 염두에 두어야 할 또 다른 문제는 시스템이 에 관한 한 두 가지 전략에 대한 공약에 지어진 것입니다. 그리고 한 번에 일부 devs는 가 데이터베이스에 입력되기 전에 HTML 인코딩 데이터에 일부 페이지를 썼습니다. 따라서 일부 데이터는 이미 데이터베이스에 인코딩 된 HTML 일 수 있습니다. 일부 데이터는 그렇지 않습니다. 은 브라우저에서 표시 용으로 안전하게 데이터베이스에서 오는 모든 데이터를 실제로 신뢰할 수 없습니다.

제 질문은 : 처음부터 ASP .NET 웹 응용 프로그램을 구축하는 것이 이상적인 솔루션 일 것이고, 우리의 상황에서 우리에게 좋은 접근 방법은 무엇이겠습니까?

답변

1

ASP.NET/MVC 면도기에서 HTML을 데이터베이스에 직접 저장한다고 가정하면 HTML 인코딩이 자동으로 수행되므로 부주의 개발자는 소개 의무를 뛰어 넘어야합니다. XSS. 표준 웹 폼 (또는 webform 뷰 엔진)을 사용하면 개발자가 동일한 구문을 수행하는 <%: 구문을 사용하도록 할 수 있습니다. (개발자가 과실이 될 위험성은 더 높지만)

또한 요청 유효성 검사를 선택적으로 사용하지 않도록 설정할 수도 있습니다. 정말로에 대해 지원해야합니다. 요청이 있으십니까? 대다수의 요청은 아마 HTML을 보존 (또는 허용) 할 필요가 없을 것입니다.

2

html을 제거하기 위해 정규 표현식을 사용하는 것은 상당히 쉽고 정확하기가 어렵습니다. HTML 입력을 지우려면 actual parser을 사용하여 엄격한 XML 준수를 적용하는 것이 좋습니다. 데이터에 대한 cleanraw :이 상황에서 어떻게 할 것인지

매장을 데이터베이스에 필드입니다. 사용자가 컨텐츠를 편집하려면 원시 데이터를 보내야합니다.변경 사항을 제출하면 위생 처리하여 clean 필드에 저장합니다. 개발자는 페이지에 콘텐츠를 출력 할 때 clean 필드 만 사용합니다. 심지어 지금까지 원시 필드 dangerousRawContent의 이름을 지정하는 것이므로 해당 필드를 참조 할 때주의를 기울여야합니다.

이 기술의 추가 이점은 원래 의도 한 내용을 잃어 버리지 않고 나중에 파서를 개선하여 원시 데이터를 다시 살균 할 수 있다는 것입니다.

관련 문제