|
|
#조치방안
#방어법
#XSS 방어
#크로스사이트스크립트
#SQL구문삽입
#입력검증
#특수문자 제거
XSS(Cross-site Script)와 SQL 인젝션 방어법
입력값에서 다음과 같은 특수문자 제거하기!!!
< > ( ) ' " ; = + | & - # ..
JSP에서 특수문자 제거하기
<%
String user_name = request.getParameter("name");
user_name = replace(user_name, "<", " ");
user_name = replace(user_name, ">", " ");
user_name = replace(user_name, "(", " ");
user_name = replace(user_name, ")", " ");
user_name = replace(user_name, "'", " ");
user_name = replace(user_name, "\"", " ");
user_name = replace(user_name, ";", " ");
user_name = replace(user_name, "=", " ");
user_name = replace(user_name, "+", " ");
user_name = replace(user_name, "|", " ");
user_name = replace(user_name, "&", " ");
user_name = replace(user_name, "-", " ");
user_name = replace(user_name, "#", " ");
user_name = replace(user_name, "..", " ");
%>
PHP에서 특수문자 제거하기
<?PHP
$user_name = $_POST['name'];
$spc = array('<', '>', '(', ')', '\'', '"', ';', '=', '+', '|', '&', '-', '#', '..');
$user_name = str_replace($spc, ' ', $user_name);
?>
두 소스코드는 하나의 입력변수에 대해서 JSP와 PHP에서 다수의 특수문자를 공백( )으로 치환하는 것이다.
위와 같은 개념으로 함수를 만들어서 모든 변수에 적용시키면 XSS공격, SQL구문삽입 공격 등을 대부분
차단할 수 있다.
공백문자로 치환할 특수문자 목록에 연이은 마침표(..)가 들어있으므로 경로조작 취약점도 대부분 방어할 수 있다.
[주의사항]
- 개발자들이 많이 간과하는 부분이 "
파일이름 "이다.
파일이름도 사용자가 조작할 수 있는 입력값이므로 특수문자를 제거해야 한다.
- 마침표 두 개('
.. ')도 공백으로 처리하면 다수의 파일다운로드/경로조작 취약점을 방어할 수 있다.
완전하게 경로조작 취약점을 막기 위해서는 사선(/), 역사선(\) 문자도 치환하거나 제거해야 한다.
또는 다른 파일다운로드 방어법을 참조...
[처음 작성한 날: 2016.11.09]
[마지막으로 고친 날: 2016.11.14]
< 이전 글 : 파일다운로드/경로조작 방어하기 (2016.11.09)
> 다음 글 : 길찾기(sitemap) (2016.11.09)
이 저작물은 크리에이티브
커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
|