반사형 크로스 사이트 스크립팅 xxs 질문...

반사형 크로스 사이트 스크립팅 xxs 질문...

QA

반사형 크로스 사이트 스크립팅 xxs 질문...

답변 1

본문

자꾸 홈페이지가 파싱? 다른 사이트로 이동이 되는 공격을 받아서 웹 취약점 검사를 했습니다..

결과는 아래와 같은데 이걸 어떻게 변경 해줘야하나요??

 

차이점:

다음 변경사항이 원본 요청에 적용되었습니다. ·'month' 매개변수의 값을 '09%27%22%3E%3Ciframe+id%3D32+src%3Dhttp%3 A%2F%2Fdemo.testfire.net%2Fphishing.html%3E'(으)로 설정

 

파라미터:

month 취약한 이유: 다음 변경사항이 원본 요청에 적용되었습니다. ·'month' 매개변수의 값을 '09%27 %22%3E%3Ciframe+id%3D32+src%3Dhttp%3A%2F%2Fdemo.testfire.net%2Fph ishing.html%3E'(으)로 설정

 

테스트 응답:

GET /bbs/board.php?bo_table=calendar&year=2023&month=09%27%22%3E% 3Ciframe+id%3D32+src%3Dhttp%3A%2F%2Fdemo.testfire.net%2Fphishing.htm l%3E&list_type=&list_type=&category_1=&category_2=&category_3=&my_po st= HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Ge cko Referer: https://test.com/bbs/board.php?bo_table=calendar Cookie: e1192aefb64683cc97abb83c71057733=Y2FsZW5kYXI%3D; PHPSESSID =mebmu74dl2jdc64q8nebq0b84p; 2a0d2363701f23f8a75028924a3af643=MTc 1LjExNC4xNzIuMjE1 Host: test.com Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US

 

/bbs/board.php?bo_table=calendar&year=2023&month= 이 부분이 문제인거 같은데

 

자바스크립트로 버튼 클릭 시 

 

$('#calenderMonth').change(function(){
            var year = $('#calenderYear').val();
            var month = this.value;             

            location.href=

'https://test.com/bbs/board.php?bo_table=calendar&year='+year+'&month='+month+'#go';
        });

 

이런식으로 이동 해주는 url을 박아넣어서 그런걸까요???... 어떻게 고쳐야할지 막막합니다.

이 질문에 댓글 쓰기 :

답변 1

다음과 같은 방법으로 시도해 볼 수 있을 것 같습니다.

 

입력 검증 (Input Validation):

사용자 입력을 받기 전에 입력 유효성 검사를 수행해야 함.
특수 문자나 악의적인 코드를 필터링하거나 이스케이핑하여 사용자 입력을 정리해야 함.
사용자가 입력할 수 있는 문자열의 길이 및 형식을 제한해야 함.


$month = filter_input(INPUT_GET, 'month', FILTER_SANITIZE_STRING);

 

출력 이스케이핑 (Output Escaping):

사용자 입력을 출력할 때, 적절한 이스케이핑을 수행해야 하며, 이로써 사용자 입력이 스크립트로 해석되는 것을 방지함.


echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

 

URL 파라미터의 제한:

URL 파라미터를 사용할 때, 검증된 파라미터만 허용하고 나머지는 무시하도록 코드를 작성함.


$validMonths = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
if (in_array($month, $validMonths)) {
    // 유효한 월일 경우 처리
} else {
    // 유효하지 않은 월 처리 또는 오류 메시지 출력
}

 

클라이언트 측 이동 (Client-side Redirection):

클라이언트 측에서 URL을 구성하고 이동하는 경우, 이동할 URL을 검증하고 특정 도메인 또는 경로 외의 URL로의 이동을 방지해야 함.


var year = $('#calenderYear').val();
var month = this.value;
var validMonths = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
if (validMonths.includes(month)) {
    location.href = 'https://test.com/bbs/board.php?bo_table=calendar&year=' + year + '&month=' + month + '#go';
} else {
    // 유효하지 않은 월 처리 또는 오류 메시지 출력
}

 

원하시는 답변이 되었는지 모르겠네요

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 9
© SIRSOFT
현재 페이지 제일 처음으로