자바 SE 정규식 리퍼런스:
http://docs.oracle.com/javase/tutorial/essential/regex/
예제소스 파일:
정규식테스트
정규식(regular Expression)은 사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식이다.
프로그래밍 언어나 명령어 쉘에서 특정 문자열을 검색하거나 취환하는 용도로 많이 사용된다.
[예제1] 자바프로그램에서 정규식은 Pattern과 Matcher 클래스를 사용하여 활용할 수 있다.
public String regTest(String data) {
StringBuffer buffer=new StringBuffer();
String regEx ="^(\\d{1,}):\\D{1,}:(\\1)$";
System.out.println("**receive request: "+ data);
if ( data != null ) {
Pattern p=Pattern.compile(regEx);
Matcher m= p.matcher(data);
if ( m.find() ) {
buffer.append(" Valid Input: "+data);
}else {
buffer.append("Invalid Input: "+data);
}
} else {
buffer.append("Input data is null !! ");
}
return buffer.toString();
}
[예제2] 전화번호 입력란에 입력되는 값이 전화번호 형식의 패턴을 이용하여 입력값의 유효성을 점검한다.
public String testRegEx(HttpServletRequest request) {
StringBuffer buffer=new StringBuffer();
String data=request.getParameter("data");
// 입력값이 전화번호 규격에 맞으면 유효한 입력값,
// 맞지 않으면 유효하지 않은 입력값을 응답한다.
String regex="^\\d{2,3}-\\d{3,4}-\\d{4}$";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(data);
if ( m.matches() ) {
buffer.append("유효한 입력값: "data);
} else{
buffer.append("유효하지 않은 입력값: "+data);
}
return buffer.toString();
}
[예제3] 그루핑 ()을 이용하여 입력값의 패턴을 체크할 수 있다. (처음 나온 값이 세번째 컬럼에 포함되어 있는 경우 유효한 값으로 판단, 두번째 컬럼은 반드시 숫자여야 함)
public String testRegEx(HttpServletRequest request) {
StringBuffer buffer=new StringBuffer();
String data=request.getParameter("data");
// kim:1234:/home/kim: <-- 유효한 입력
// lee:11:/home/guest: <-- 유효하지 않은 입력
// park:A90:/home/park:test <-- 유효하지 않은 입력
// choi:3:/home/guest:choi <-- 유효하지 않은 입력
String regex="^([a-zA-Z0-9]+):[0-9]+:/home/(\\1):.*";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(data);
if ( m.matches() ) {
buffer.append("유효한 입력값: "+data);
} else{
buffer.append("유효하지 않은 입력값: "+data);
}
return buffer.toString();
}
[예제4] 입력값이 <script>......</script> 패턴의 값을 포함하고 있으면 입력값을 HTML 인코딩 하여 출력한다.
public String testRegEx(HttpServletRequest request) {
StringBuffer buffer=new StringBuffer();
String data=request.getParameter("data");
// <script>alert("xss");</script> 패턴에 일치하면
// 입력값을 html 인코딩 하여 출력한다.
// <script>alert("xss");</script>
// <SCRIPT>alert("xss");</SCRIPT>
// <ScRiPt>alert("xss");</ScRiPt>
// <script >alert("xss"); </ script>
String regex="<\\s*script\\s*>.*</\\s*script\\s*>";
Pattern p=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(data);
if ( m.find() ) {
buffer.append("입력값: "+htmlEncoding(data));
} else{
buffer.append("입력값: "+data);
}
return buffer.toString();
}
public String htmlEncoding(String data){
return data.replaceAll("<", "<").replaceAll(">", ">").replaceAll("'", "'")
.replaceAll("\"", """).replaceAll(" ", " ");
}
[예제5] 패스워드 정책이 적용되도록 입력값을 검증한다.
알파벳,숫자,특수문자를 포함, 8글자 이상의 문자열인 경우 패스워드 설정 허용
String p="(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&+=])(?=\\S+$).{8,}";
Pattern pattern=Pattern.compile(p);
Matcher matcher = pattern.matcher(data);
if ( matcher.matches()) {
buffer.append("유효한 패스워드: "+data);
} else {
buffer.append("유효하지않은 패스워드: "+data);
}
정규표현식 – wiki백과 : http://ko.wikipedia.org/wiki/
정규표현식의 기본 문법 정리표 : http://blog.daum.net/creazier/15309380
정규표현식 사용하기 : http://icoon22.tistory.com/220
자바스크립트 정규 표현식 : http://yaku.tistory.com/75
Perl 정규표현식, 메타데이타
: http://blog.naver.com/PostView.nhnblogId=turtle1006&logNo=60107758671
정규표현식 학습 및 연습 -> http://gskinner.com/RegExr/
정규표현식을 도식화해서 보여주는 사이트: http://www.regexper.com/
'보안 > 시큐어코딩' 카테고리의 다른 글
ESAPI 보안 코딩 실습 예제 코드 (0) | 2014.05.23 |
---|---|
[시큐어코딩] XML 인젝션 테스트 (0) | 2014.05.23 |
[시큐어코딩실딩] 인코딩 (0) | 2014.05.23 |
[시큐어코딩실습] ESAPI 보안 코딩 실습 (0) | 2014.05.16 |
[시큐어코딩실습] Command Injection 취약점 제거 (0) | 2014.05.14 |