본문 바로가기
C#

C#] XSS(Cross-site Scripting) - 스크립트 필터링

by Fastlane 2020. 10. 6.
728x90
반응형

크로스사이트 스크립팅

악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법

 

보안위협 

웹 사이트 게시판, URL등에 악의적인 스크립트를 삽입하여 사용자의 쿠키(세션)를 도용하거나

악성코드(URL 리다이렉트)를 유포할 수 있다. 

 

취약한 코드

사용자 입력 값에 대한 검증 및 필터링이 이루어지지 않으며, HTML코드가 입력실행되는 경우

 

조치방법

사용자로부터 입력받는 인수값에 대해서는 검증 로직을 추가하거나, 부득이하게 게시판에서 HTML을 사용하는 경우 HTML코드 중 필요한 코드에 대해서만 입력 가능하도록 설정

 

1. 검색어에서 XSS를 방지하기 위해, 특수기호 필터링

 

public String CleanInput(string strIn) {
  // Replace invalid characters with empty strings.
  try {
    strIn = HttpUtility.UrlDecode(strIn);
    return Regex.Replace(strIn, @"[^\w\.,-]", "", RegexOptions.None);
  }
  // If we timeout when replacing invalid characters, 
  // we should return Empty.
  catch(Exception ex) {
    return String.Empty;
  }
}

 

2. 게시글을 작성 시, 불필요한 HTML 태그를 삭제한다. 

필터링 조치 대상 태그 : <script>, <embed>, <object>, <frameset>, <frame>, <iframe> 등

public String RemoveBadTag(string v) {
  v = Regex.Replace(v, @"</?(?i:script|embed|object|frameset|frame|iframe|meta|style|BLOCKQUOTE|onerror|onload|onfocus)(.|\n|\s)*?>", string.Empty, RegexOptions.Singleline | RegexOptions.IgnoreCase);
  return Regex.Replace(v, @"(?:<[^>]+\s)(on\S+)=[""']?((?:.(?![""']?\s+(?:\S+)=|[>""']))+.)[""']?", string.Empty, RegexOptions.Singleline | RegexOptions.IgnoreCase); //이벤트핸들러 태그 삭제
}

 

728x90
반응형

댓글