2012/11/08 13:24

대소문자 구별없이 문자열 필터링하기. JAVA

문자열 필터링의 경우,
SQL Injection이나 XSS 공격을 막기위해 흔히 사용하는 방법 중 하나이다.

프레임웍에서 해당 공격을 막을 수 있는 필터링 메서드를 제공하면서,
각 공격에 자주 사용되는 문자열 blackList를 만들어 두고 필터링을 하고 있었다.

그런데, 
문자열을 찾으려면 indexOf라는 함수를 사용해야 하고,
그러기 위해서는 대문자나 소문자로 문자열을 변경해야하는 문제가 있었다.(toLowerCase..)

그래서 찾아본 결과,
정규식을 사용하면 된다는 것을 알았다. 

즉, 
대소문자 구별없이 matches하거나 replaceAll하기 위해서는 (?i)가 필요하다.
그리고 문자열 내에서 찾아내기 위해서는 (?i).*~~~.* 이라는 표현이 들어가주어야 한다.

예제를 보면 바로 이해가 갈듯..

if( result.indexOf(SQL_BLACKLIST[i]) > -1  ) 
->
if( result.matches("(?i).*"+SQL_BLACKLIST[i]+".*"))
result.replaceAll("(?i)"+SQL_BLACKLIST[i], "")




덧글

댓글 입력 영역