개발 Q&A

제목 filter_var()함수를 사용하여 데이터값을 처리하는데 <script>만 처리가 안되는 경우
카테고리 PHP
글쓴이 정수리 작성시각 2017/03/07 17:26:36
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 12265   RSS

get로 오는 데이터들을

 

filter_var()함수를 사용하여 숫자가 아닌

 

데이터들의 경우 메인페이지로 이동하도록 코드를 짠후

 

테스트를 해보았습니다.

 

url의 끝에 a= 이부분에 숫자가 아닌

 

a=dfdf

 

 이렇게 넣고 접속을 하면 경고문이 출력이 되고 메인페이지로 이동이 됩니다

 

그런데 <script> 이렇게 스크립트 문장을 넣으면

 

메인페이지로 이동하는 것이 아닌

 

406 Not Acceptable 에러 페이지가 출력이되네요;

 

스크립트문이기에 허용되지 않아 406페이지가 출력되는것 같은데

실제운용하는 사이트의경우 저 406 Acceptable페이지가 아닌

경고문과 함께 메인페이지로 이동하도록 변경하고 싶은데

 

어떻게 해야 할지 모르겠네요;

 

혹시나해서 로컬에서

 

if(fiter_var("<script>alert('1')</script>", FILTER_VALIDATE_INT)){

1

}else {

2

}

 

테스트 해보았는데 이 경우에는 406 Acceptable 페이지가 아닌

정상적으로 2를 출력하였습니다

이렇게 보면 스크립문도 필터가 되는것 같은데

운용하는 페이지에서는 메인페이지로 이동하지 않고 406 Acceptable 출력페이지가 뜨는것일까요??

 

개인적으로 궁금한 것이

제가 아직 많이 부족하다 보니 이 406에러페이지의 경우 웹서버에서 자동으로 페이지를 출력하는 것인가요??

 

function paramDataCheck($param) {
		if(filter_var($param, FILTER_VALIDATE_INT)) { 
			return $param; 
		} else { 
			popup_msg("정상적인 접근이 아닙니다.\\n이와 같은 방법으로 지속적으로 접속시 신고처리될 수 있습니다.");
		//opup_msg("정상);
			movepage(getDomain());
		}
	}	

 

 

 다음글 계층형 JSON 만드는 중에 질문하나 드립니다. (1)
 이전글 코드이그나이터 이메일 라이브러리 질문있습니당.. (2)

댓글

변종원(웅파) / 2017/03/07 21:44:36 / 추천 0

php함수중에 기호를 다른 문자열로 바꿔주는 함수가 있습니다. 그걸로 처리하시거나

기호를 모두 없애고 텍스트만 가지고 체크하시면 되겠죠

정수리 / 2017/03/08 09:13:30 / 추천 0

@변종원(웅파)

답변감사합니다

달아주신 답변을 참고하여 

테스트로 코드를 짜본후 실행해보았습니다.

function paramDataCheck($param) {	
		$pattern = "/[ #\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i";
		$replace = "";
		$word  = preg_replace($pattern, $replace, $param);
		popup_msg($word);
}

preg_replace로 특수기호들을 ""으로 없애준후 출력 반환값을 화면에 출력해보았는데

특수기호들은 다른 문자열로 변경되더라구요 

그래서 '<script>' 넣어준후 실행해보았지만 똑같이 406 에러페이지가 출력이되네요

'script>'이렇게 하면 정상적으로 되지만 '<script', '<script>' 이렇게 데이터를 넣으면 406에러페이지가 출력됩니다 ㅜㅜ

제가 놓치고 있는 부분이 있을까요?

변종원(웅파) / 2017/03/08 10:13:12 / 추천 0

'<script>', '</script>' 를 넣고 $word 출력해보세요. 어떻게 나오나

popup_msg함수 주석처리하시구요