2011-12-23 4 views
0

잠시 동안 MS's AntiXSS library을 사용해 왔습니다. 최근에 내 사이트의 텍스트 영역을 일반 텍스트 영역 (WYSIWYG로 사용됨)으로 변경하고 줄 바꿈을 br에 대한 변환을 실행하기로 결정했습니다.C#에서, br를 포함하여 HTML 입력을 허용하면서 XSS를 방지하는 방법은 무엇입니까?

문제는 MS의 AntiXSS 라이브러리가이 문제를 지원하지 않는다는 것입니다. 나는 사용자의 항목을 내 DB에 직접 체크하지 않도록하고 싶지 않다. MS AntiXSS 라이브러리를 사용하지 않고, C#에서 br를 포함한 HTML 입력을 허용하면서 XSS를 방지하는 신뢰할 수있는 방법은 무엇입니까?

+1

텍스트를 Html로 인코딩 한 다음 새 줄을
으로 바꾸고 데이터베이스에 저장하십시오. 이 필드에서 XSS 검사를 비활성화하십시오. Html로 인코딩 했으니 까. (만약 당신이 어디에서, 내가 그것을 저장하고 렌더링하는 동안 인코딩) – Guillaume

+0

Guillaume 생각을 주셔서 감사 ... 내가 ASP.NET MVC 3 (면도칼)을 사용하고 있지만 그것을 다시 디코딩하는 방법을 알아낼 수는 없지만 보기에서 HTML로. 인코딩되지 않은 상태로 저장하면 기본적으로 해커 코드가 저장됩니다. HTML을 렌더링하고 싶지만 안전합니다. 희망찬 생각? :) – Chaddeus

답변

0

이 문제를 해결하기 위해 원본 HTML을 그대로 저장하고 저장하기 전에 Environment.Newlines에서 <br />으로 바꾸기로 결정했습니다.

방문자에게 보여줄 때 뒤집어서 MS AntiXSS 코드를 사용하여 정리합니다. 100 % 내가 그것을하고 싶지만 그 일을 끝내는 이상적인 방법이 아닙니다.

모든 요청에 ​​대해 AntiXSS를 실행하지 않도록 여기에 약간의 캐싱을 수행합니다.

+0

이것은 삽입 된'
'을 AntiXSS가 대체하므로 작동하지 않습니다. –

+0

그래,'
'을'
'으로 바꿉니다.하지만 여전히 내 필요에 따라 작동합니다 (대신'
'을 출력하고 싶습니다). – Chaddeus

0

AntiXSS 출력물을 얻을 수 있습니까? 그렇다면 AntiXSS를 통해 입력을 실행 한 다음
대체 단어를 만들고 데이터를 직접 저장하십시오.

+0

Sry, 지금은 가지고 있지 않아요. 한 가지 문제는 AntiXSS의 출력이 모든 linebreaks를 제거한다는 사실 때문입니다. 그래서 간단한 .replace는 효과적이지 않습니다. – Chaddeus

1

이 필드에 대해 AntiXSS를 비활성화하고 데이터베이스의 사용자 입력을 직접 저장할 수 있습니다. 그런 식으로 HTML 만이 아닌 모든 출력에이 텍스트를 렌더링 할 수 있습니다. 당신이 ASP MVC 면도기를 사용하여 HTML 페이지에서이 텍스트를 표시 할 때 이제

는,이 같은 것을 사용할 수 있습니다 HTML 태그는 해석되지 않도록

@Html.Encode(Model.MyMultilineTextField).Replace(@"\n", "<br />") 

Html.Encode 텍스트를 인코딩하고 XSS는 불가능합니다. 변환을 수행하는 확장 메소드를 Html에 추가 할 수 있습니다 (whith 대체). \ r도 처리 할 수 ​​있습니다.

+0

'@ Html.Encode()'를 사용하면'<b>'과 같은 출력이 생성되고보기에는 HTML이 렌더링되지 않습니다. – Chaddeus

+0

@Chad 그래서 Guillaume이 텍스트를 이스케이프 한 후 개행 문자 *를 대체합니다. –

관련 문제