ホームページ > データベース > mysql チュートリアル > プリコンパイルによって SQL インジェクションが妨げられる理由

プリコンパイルによって SQL インジェクションが妨げられる理由

清浅
リリース: 2019-05-11 14:55:57
オリジナル
6026 人が閲覧しました

プリコンパイルによって SQL インジェクションが防止される理由: プリコンパイル後、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート