Java開発でJSP画面にSQLインジェクション対策方法のまとめ
1.正規表現式の対応
参考コード
import java.util.regex.*;
private String strChkSQL= “^(.+)\\sand\\s(.+)|(.+)\\sor(.+)\\s$”;
Pattern.matches(CHECKSQL,targerStr);
SQL meta-charactersの正規表現
/((\%3D)|(=))[^\n]*((\%27)|(\’)|(\-\-)|(\%3B)|(:))/i
インジェクションSQL正規表現
/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
UNION SQL構文正規表現
/((\%27)|(\’))union/ix(\%27)|(\’)
MS SQL Server SQLについて正規表現
/exec(\s|\+)+(s|x)p\w+/ix
2.文字列フィルター
public static boolean funcSQLInject(String str)
{
String inj_str = “'|and|exec|insert|select|delete|update|
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
String str_inject[] = split(inj_str,"|");
for (int i=0 ; i < str_inject.length ; i++ )
{
if (str.indexOf(str_inject[i])>=0)
{
return true;
}
}
return false;
}
3.URLの文字列を判断する
package com.startnews24.funcSQLInject;
import java.net.*;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.lang.String;
public class funcSQLInject{
public static boolean funcSQLInject(String str)
{
String inj_str = “'|and|exec|insert|select|delete|update|
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
String[] str_inject=inj_str.split(“\\|");
for (int i=0 ; i<str_inject.length ; i++ )
{
if (str.indexOf(str_inject[i])>=0)
{
return true;
}
}
return false;
}
}
4.JavaScriptで文字列を遮断する
function chkStrKaku(a)
{
return 1;
fibdn = new Array (”‘” ,”\\”,”/”);
i=fibdn.length;
j=a.length;
for (ii=0; ii<i; ii++)
{ for (jj=0; jj<j; jj++)
{ temp1=a.charAt(jj);
temp2=fibdn[ii];
if (tem’; p1==temp2)
{ return 0; }
}
}
return 1;
}