문제

나는 JavaScript 주입에 대한 ASP.NET MVC 학습 사이트에서 읽고 있습니다.

나는 이상한 엉덩이 주사 공격을하기 위해 JavaScript를 사용하는 사람에 대해 깨닫지 못했습니다.

그러나 그것은 나에게 답이없는 질문을 남겼습니다.

첫 번째

언제 html.encode를 사용합니까? 해당 사용자 또는 다른 사용자가 제출 한 정보를 표시 할 때만 사용합니까?

아니면 모든 것을 위해 사용합니까? 사용자가 제출 한 형태가 있다고 말하면,이 정보는 사용자에게 결코 표시되지 않을 것입니다. 여전히 html.encode를 사용해야합니까?

내부에 내부를 넣는 방법을 잘 모르고 html.enxtbox () html.encode 태그를 어떻게할까요?

내 사이트에 풍부한 HTML 편집자가 있습니다. 사용자는 그것을 사용할 수 있고 대담한 일을 할 수 있습니다. 이제 레이블을 통해 사용자에게 정보를 다시 표시하고 싶습니다. 나는 html을 할 수 없다.

그러나 나는 사용자가 JavaScript 공격을 추가하기 위해 무엇을 막을 것인지처럼 떠날 수 없습니까?

그래서 나는 무엇을할까요? Regex를 사용하여 모든 태그를 걸러 내겠습니까?

제삼

"antiforgeryToken"이라는 다른 태그도 언제 사용할 수 있습니까?

감사

편집하다

거의 모든 사람들이 "흰색 목록"과 "블랙리스트"를 사용한다고 말하면서이 목록을 작성하고 들어오는 값과 비교할 수 있습니까?

도움이 되었습니까?

해결책

좋은 질문!

  1. 첫 번째 대답을 위해, 나는 보는 것을 고려할 것이다 여기 이전 질문에서. 답변에서 논의한 바와 같이, HTML Encode를 사용한다고해서 모든 XSS 공격으로부터 완전히 보호되지는 않습니다. 이를 돕기 위해 사용을 고려해야합니다. Microsoft 웹 보호 라이브러리 (antixss 특히), Microsoft에서 제공됩니다.

  2. 이미 언급 된 바와 같이, 허용되는 태그 목록을 사용하는 것이 최선의 방법이며, 다른 사람들은 다른 사람들을 제거 할 수 있습니다.

  3. antiforgeryToken 토큰은 페이지가 게시 될 때 렌더링 된 양식 필드에 대해 검증 된 쿠키를 제공하기 때문에 요청 위조 (CSRF)를 방지하기 위해 작동합니다. 내가 알고 있다는 이유는 당신이 당신의 모든 양식에서 이것을 사용할 수 없다는 것을 의미하지 않습니다.

다른 팁

사용자가 제출 한 데이터에 대해 HTML Encode를 사용하십시오. 데이터베이스에 제출할 때 사용할 필요가 없습니다. 그렇지 않으면 Simon '&'Sons와 같은 홀수 데이터를 얻을 수 있습니다. 실제로 나는 페이지에 동적으로 작성된 컨텐츠에서 사용하는 데 해를 끼치 지 않습니다.

허용되는 태그 목록을 사용하고 HTML 편집기를 위해 다른 모든 것을 폐기하십시오. 사람들이 말했듯이 화이트리스트를 사용하십시오.

세 번째는 a를 방지하기위한 것입니다 크로스 사이트 요청 위조 공격. 이것을 사용하여 사람들이 사용자로부터 '도난당한'쿠키를 사용하여 게시물을 수행 할 수있는 것을 막기 위해 사용합니다. 따라서 게시물을 수락하기 전에 인증 된 쿠키가 필요할 수 있지만 사용자가 사이트를 방문 할 때 악의적 인 사용자는 해당 쿠키를 가져간 다음 사이트에 양식을 제출할 수 있습니다.

자세한 내용은 여기를 참조하십시오.http://haacked.com/archive/2009/04/02/anatomy-of-csrf-attack.aspx

사용 방법:http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

화이트리스트에 대한 수신 된 입력을 항상 검증하십시오. 블랙리스트를 사용하면 인코딩 문제에 반대 할 수 있습니다. 입력을 검증 할 때 항상 화이트리스트를 사용하십시오.

사용자 입력을 검증하기 위해 클라이언트 측면 검증에 의존하지 마십시오. 클라이언트 측 유효성 검사는 사용자가 올바른 데이터를 입력하는 데 도움이됩니다. 그러나 악의적 인 사용자는 이것을 사용하지 않으며 클라이언트 측 유효성 검사를 우회 할 수 있습니다. 클라이언트 측 유효성 검사는 보안 수정으로 간주해서는 안됩니다. JavaScript를 사용하여 입력을 검증하는 것은 사용해서는 안됩니다. 보시다시피 JavaScript는 HTML 페이지에서 변경하고 수정하기가 매우 쉽습니다. 또한 브라우저에서 JavaScript를 비활성화 할 수 있습니다. 따라서 파일 뒤에 코드를 추가 확인하십시오.

데이터가 처음 허용되는 경우뿐만 아니라 매번 입력을 유효성으로 검증하십시오. 예를 들어 쿠키를 설정하는 경우 쿠키가 동일한 값이고 각 요청마다 정확한지 확인하십시오. 악의적 인 사용자는 세션 중 언제든지 값을 수정하고 변경할 수 있습니다.

응용 프로그램의 설계 고려 사항을 기반으로 구현할 수있는 다양한 수준의 보안이 있습니다.

나는 다음과 같은 기본 규칙을 가지고 갈 것입니다.

  1. 알려진 악성 섹션을 제거하여 모든 입력을 소독합니다 (예 : <script> 풍부한 HTML 편집기의 태그). REGEX 기반 패턴 매칭은 일반적으로 이러한 종류의 소독에 사용됩니다.

  2. 허용 된 값의 흰색 목록에없는 모든 입력을 제거하십시오.

  3. 데이터베이스에 저장하기 전에 HTML을 인코딩하고 디스플레이를 위해 검색 될 때 다시 해독하십시오.

편집하다: @phoenix는이 맥락에서 검증에 대해 이야기하므로 이것을 추가 할 것이라고 생각했습니다. 나는 전에 이것을 말했고 반복한다 : 나는 스크립트 기반 검증에 반대하지 않는다. 나는 사람들이 명시 적으로 의존하지 않도록 경고합니다. 일반적인 설계 패턴은 스크립트 기반 유효성 검사를 사용하여 기본 기준을 검증하고 해당 데이터가 제출 될 때 서버 측에서 엄격한 검증을 적용하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top