SQL Injection


SQL InjectionはSQL構文の弱点を利用して攻撃する方法です.
たとえば、次の構文を使用して、ユーザーのIDとパスワードが正しいかどうかを確認します.
//SELECT * FROM USER WHERER ID='' AND PW ='';
「IDの入力」ウィンドウにTESTIDを入力すると、再びエラーが発生します.
//SELECT * FROM USER WHERER ID='TESTID'' AND PW ='';
「アイデンティティの入力」ウィンドウに「or 1=1#」と入力すると、#の後のコメントでデータ全体を出力してログインできます.
//SELECT * FROM USER WHERER ID='' or 1=1#' AND PW ='';
他にもいくつかのsql注入方法があります.これを解決するには、Statementクラスではありません.
PreparedStatementを使用すると、パラメータ値としてユーザー名とパスワードを受信することで、上記の問題を解決できます.
(このテストではMysql、Eclipse、JDBCを使用します.)
//SQL Injection 방지
PreparedStatement stmt = con.prepareStatement("select * from member where id=? and pw=?");
stmt.setString(1, id);
stmt.setString(2, pw);