WEB/설정 및 에러

[웹 보안취약점] XSS, XPath, 악성 스크립트 방지

Diabol 2021. 4. 16. 17:53

XSS, XPath, 악성스크립트는 내용은 조금씩 다르지만 결국 파라미터에 조작된 쿼리문이나, 스크립트 언어 등을 삽입하여

비정상적인 데이터를 호출하거나, 사용자 정보를 가로채는 등의 공격 취약점이다.

따라서 파라미터 부분에 값 검증 처리를 해주면 된다.

 

 

 

1) Filter 

 

웹앱에 필터를 설정하여 파라미터의 값을 필터링하는 기능이다.

필터 기능을 할 클래스와 동작할 클래스를 만들어 webapp - WEB-INF/web.xml 에서 filter 걸어주면 된다.

 

자세한 내용은

 

XSS 필터(크로스 사이트 스크립트),Encoding 필터

-XSS 필터 웹 페이지를 만들보면 사용자의 악의적인 공격을 많이 받게되는데 이런 것들중 가장 대표적인것이 XSS 공격이다 크로스 사이트 스크립트 라는것인데 서버로 보내는 입력값에 자바스크

epthffh.tistory.com

 

필터 클래스를 직접 복사하면 알겠지만, filterConfig 선언 오류가 난다.

 

private FilterConfig filterConfig; 

 

추가해줍시다. 나는 추가해주었는데 잘 작동됨.

 

RequestWrapper 의 cleanXSS 메소드가 필터링을 수행한다.

위에는 XSS 관련된 부분만 필터링을 하므로, XPath 나 악성스크립트에 해당하는 요소들도 맞게 추가 및 삭제하면 된다.

 

< > ( ) [ ] script javascript eval ' " , @ * = 등등

(select insert update delete drop union 등등도 하면 좋,,겠지?)

 

이런식으로 문제를 일으킬 수 있는 문자를 거르면 된다.

 

 

 

2) 페이지에 직접 설정

 

파라미터 값을 받아와서 위처럼 직접 replace 해주거나

요소가 감지되면 알림창 띄우고 뒤로가게하거나 기본값을 세팅하거나

해당 데이터형식만 넣게 하던가.. 등등의 방법으로

필터링하거나 제한을 두면 된다.

 

try {
	year = Integer.parseInt(year);
} 
catch (Exception e) {
	out.println("<script>");
    out.println("alert('잘못된 경로입니다.')");
    out.println("location.replace('이동할 URL')");
    out.println("</script>");
	뒤로가기;
}
year = request("year")

on error resume next
year = CInt(year)
if err.number<>0 Then
	Err.Clear
	%>
		<script type="text/javascript">
			alert('올바른 접근 경로가 아닙니다.');
			location.replace('이동할 URL');
		</script>
	<%

end if
Err.Clear
year = request("year")

Dim y_f
y_f = year
year = ""

for i = 1 to len(y_f)
	checkSTR = mid(y_f, i, 1)
	if asc(checkSTR) > 47 and asc(checkSTR) < 58 then
		year = year&checkSTR
	end if
Next

If Len(year) > 4 or Len(year) < 4  Then
	year = year(now())
end If

 

숫자 형식이라면 이런식으로.. 숫자만 추출하거나 다른 주소로 이동하게끔 하면 된다.