プリコンパイルによって SQL インジェクションが防止される理由: プリコンパイル後、SQL ステートメントはデータベースによって分析、コンパイル、最適化されており、データベースはパラメーター化された形式でクエリできるため、機密文字が含まれている場合でも、データベースはそれらを属性として扱います SQL 命令の代わりに値が処理されます
ご存知のとおり、Java の JDBC には前処理関数があります。この機能の利点は、特にデータベースを複数回操作する場合の実行速度を向上できることです。もう 1 つの利点は、SQL インジェクションを防止することです。厳密に言えば、SQL インジェクションの大部分を防止する必要があります。
使用方法は次のとおりです。
String sql="update cz_zj_directpayment dp"+ "set dp.projectid = ? where dp.payid= ?"; try { PreparedStatement pset_f = conn.prepareStatement(sql); pset_f.setString(1,inds[j]); pset_f.setString(2,id); pset_f.executeUpdate(sql_update); }catch(Exception e){ //e.printStackTrace(); logger.error(e.message()); }
では、なぜこのように処理することで SQL インジェクションを防ぎ、セキュリティを向上できるのでしょうか。実際、これはプログラムの実行前に SQL ステートメントがプリコンパイルされているためであり、プログラムの実行時に初めてデータベースが操作される前に、SQL ステートメントはデータベースによって分析、コンパイル、最適化されています。プランもキャッシュされ、データベースでパラメータを使用できるようになります。標準化された形式でクエリを実行します。実行時にパラメータが動的に PreprareStatement に渡される場合、パラメータに「1=1」などの機密文字が含まれている場合でも、データベースはSQL ステートメントとしてではなく、フィールドのパラメータおよび属性値としてこのコマンドは SQL インジェクションの役割を果たします。
以上がプリコンパイルによって SQL インジェクションが妨げられる理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。