자바스크립트 주입 공격이란?
웹사이트는 사용자 입력을 받아들이고 해당 콘텐츠를 다시 표시할 때마다 JavaScript 주입 공격에 취약합니다. JavaScript 주입 공격에 취약한 특정 애플리케이션을 살펴보겠습니다. 고객 피드백 웹사이트를 만들었다고 가정해 보겠습니다. 고객은 웹사이트를 방문하여 제품에 대한 피드백을 입력할 수 있습니다. 고객이 피드백을 제출하면 피드백 정보가 피드백 페이지에 다시 나타납니다.
고객 피드백 웹사이트는 간단한 웹사이트입니다. 안타깝게도 이 사이트는 JavaScript 삽입 공격에 취약합니다.
고객 피드백 양식에 다음 텍스트가 입력된다고 가정해 보겠습니다.
이 텍스트는 경고 메시지 상자를 표시하는 JavaScript 스크립트를 나타냅니다. 누군가 이 스크립트를 고객 피드백 양식에 제출하면 앞으로 고객 피드백 사이트를 방문하는 모든 사람에게
메시지가 표시됩니다. 다른 사람들은 JavaScript 주입 공격을 통해 큰 피해를 입히지 않을 것이라고 생각할 수도 있습니다.
이제 JavaScript 주입 공격에 대한 첫 번째 반응은 이를 무시하는 것일 수 있습니다. JavaScript 주입 공격은 그저 무해한 공격일 뿐이라고 생각할 수도 있습니다. 안타깝게도 해커는 웹사이트에 JavaScript를 주입하여 피해를 입히는 것으로 알려져 있습니다. XSS(교차 사이트 스크립팅) 공격은 JavaScript 삽입 공격을 사용하여 수행할 수 있습니다. 크로스 사이트 스크립팅 공격에서는 사용자의 기밀 정보가 도난당하여 다른 웹사이트로 전송될 수 있습니다.
예를 들어 해커는 JavaScript 주입 공격을 사용하여 다른 사용자의 브라우저에서 쿠키 값을 훔칠 수 있습니다. 민감한 정보(비밀번호, 신용카드 계좌번호, 사회보장번호 등)가 브라우저 쿠키에 저장되어 있는 경우 해커는 JavaScript 삽입 공격을 사용하여 이 정보를 훔칠 수 있습니다. 또는 사용자가 페이지의 양식 필드에 민감한 정보를 입력하고 페이지가 JavaScript 공격에 의해 손상되면 해커는 삽입된 JavaScript를 사용하여 양식 데이터를 획득하고 이를 다른 웹사이트로 보낼 수 있습니다.
많은 관심 부탁드립니다. JavaScript 주입 공격을 심각하게 받아들이고 사용자의 기밀 정보를 보호하십시오. 다음 두 부분에서는 JavaScript 주입 공격으로부터 ASP.NET MVC 응용 프로그램을 보호하는 두 가지 기술에 대해 설명합니다.
방법 2: 데이터베이스에 쓰기 전 HTML 인코딩
뷰에 데이터를 표시할 때 HTML을 사용하여 데이터를 인코딩하는 것 외에도 HTML을 사용하여 데이터를 데이터베이스에 제출하기 전에 데이터를 인코딩할 수도 있습니다.두 번째 방법은 목록 4의 컨트롤러와 정확히 같습니다.
예:
public ActionResult Create(string message)
{// 피드백 추가
var newFeedback = new Feedback();
newFeedback.Message = Server.HtmlEncode(message);
newFeedback.EntryDate = DateTime.Now;
db.Feedbacks.InsertOnSubmit(newFeedback);
db.SubmitChanges();
// 리디렉션
}
Message 값은 데이터베이스에 제출되기 전 Create() 작업에서 HTML로 인코딩된다는 점에 유의하세요. 메시지가 뷰에 다시 표시되면 메시지는 HTML로 인코딩되므로 메시지에 삽입된 JavaScript는 실행되지 않습니다.
요약
일반적으로 사람들은 두 번째 방법보다는 이 튜토리얼에서 설명하는 첫 번째 방법을 선호합니다. 두 번째 접근 방식의 문제점은 데이터베이스에 HTML로 인코딩된 데이터가 있다는 것입니다. 즉, 데이터베이스의 데이터에 이상한 문자가 포함됩니다. 해악은 무엇입니까?