データベース(POSTGRESQL)に挿入する前にデータを検証しようとしています。電子メール、郵便番号などに対応するデータは、ApacheCommonsValidatorを使用して簡単に検証できます。しかし、名前の場合、私はこれを使用しました:
^[a-zA-Z][ a-zA-Z]{1-30}$
これにより、特殊文字が名前として追加されるのを防ぐことができますが、ユーザーがDROP or GRANT
名前として追加するのを防ぐことはできません。を使用しPreparedStatement
ているので、問題になるとは思いませんでしたが、2次SQLインジェクションにつながる可能性があるため、SQLキーワードをデータベースに含めないようにする必要があります。
すべてのSQLキーワードをブラックリストに登録することを考えました(確かに、これによりHuge Grantがサイトにログインできなくなります。:P)、64を超えるキーワードがあるようです。これ(SQLキーワードのブラックリストフィルタリングデータ)は、 2次SQLインジェクションを防ぐための適切なアプローチですか?私のオプションは何ですか?
私はこのコードを使用しています:
String sql="INSERT INTO users (username, password, name) VALUES (?,?,?);";
try{
conn=SomeStaticClass.createConnection();
ps=conn.prepareStatement(sql);
ps.setString(1, dataBean.getUsername());
ps.setString(2, dataBean.getPassword());
ps.setString(3, dataBean.getName());
ps.execute();
}catch(SQLException e){
e.printStackTrace()
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(ps!=null){
ps.close();
}
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}