반사형 크로스 사이트 스크립팅 xxs 질문...
본문
자꾸 홈페이지가 파싱? 다른 사이트로 이동이 되는 공격을 받아서 웹 취약점 검사를 했습니다..
결과는 아래와 같은데 이걸 어떻게 변경 해줘야하나요??
차이점:
다음 변경사항이 원본 요청에 적용되었습니다. ·'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 {
// 유효하지 않은 월 처리 또는 오류 메시지 출력
}
원하시는 답변이 되었는지 모르겠네요
!-->!-->!-->!-->