🐕

Webセキュリティへの対応(SQLインジェクション)

2023/04/18に公開

1.SQLインジェクションの対応方法

今回は、「SQLインジェクション」への対応方法について考えてみましょう。
代表的な対応方法としては、下記のようなものがあります。

  • バリデーションチェックの実施
  • プレ-スホルダの利用
  • エスケープ処理、サニタイジングの利用
  • OSやアプリケーションは常に最新化
  • WAF(Web Application Firewall)の導入

それでは、対応方法について、見ていきましょう!

2.バリデーションチェックの実施

バリデーションチェックを実装することで、予期しないスクリプトの実行を防ぐことが出来ます。

  • 例としては、下記の方法があります。
  • Javaの場合、下記のように実装する。
// 整数チェックメソッド
if (value != null) {
  Pattern pattern = Pattern.compile("^[0-9]+$|-[0-9]+$");
  result = pattern.matcher(value).matches();
}

3.プレ-スホルダの利用

プレースホルダ(place holder)とは、SQL文の中で値を入れたい個所に記号を置き、後にその記号に実際の値を割り当てることです。

  • 例としては、下記になります。
  • Javaの場合、「PreparedStatement」を使用し、下記のように実装する。
Connection conn = null;

try
{
    conn = DriverManager.getConnection(DBURL, ユーザID, パスワード);

    //実行するSQL文にプレースホルダを設定
    String sql = "SELECT * FROM テーブル名 WHERE id = ?"

    //実行したいSQLからPreparedStatement型のSQL文を取得する
    PreparedStatement ps = conn.prepareStatement(sql);

    //「?」の部分に、String型の値を設定する
    ps.setString(1, "test");

    //SQL文の実行
    ps.executeQuery();
}
catch (SQLException e)
{
  System.out.println("SQLException:" + e.getMessage());
}

4.エスケープ処理、サニタイジングの利用

エスケープ処理とは、特別な意味を持つ文字列を、無害な別の文字列に変換すること。
エスケープ処理は、エスケープシーケンスと呼ばれる「(バックスラッシュ)」と何らかの記号や文字で表現します。

サニタイジングとは、害悪な文字列がないかをチェックし、特定の文字に置き換えて無害化すること。

  • 主要なエスケープシーケンスとしては、下記があります。
  • Javaの場合、下記のように実装する。
// エスケープシーケンスを使用しているため「改行のエスケープシーケンスは(改行)になる」と出力
System.out.println("改行のエスケープシーケンスは¥nになる");

主要なサニタイジングとしては、下記があります。

  • Javaの場合、下記のように実装する。
private String sanitizing( String string )
{
    // 変換処理
    string = string.replaceAll( "<", "&lt;" );
    string = string.replaceAll( ">", "&gt;" );
    return string;
}

5.OSやアプリケーションは常に最新化

OSやアプリケーションに最新のバージョンが公開されたら、最新のバージョンへ更新すること。
また、ツールやプラグインなども同様に、最新の状態を保つようにしましょう。

OSやアプリケーションのバージョンアップの中身は、ほとんどが脆弱性対策です。
最新化することで、リスクを下げることが出来ます。

6.WAF(Web Application Firewall)の導入

WAFはファイアーウォールやIPS/IDSでは防ぐことができない、Webアプリケーションの脆弱性を悪用したサイバー攻撃を防ぐことができます。
特徴としては、通信内容をアプリケーションレベルで検査できること。

※IPS:侵入防止システム(Intrusion Prevention System)
 IDS:侵入検知システム(Intrusion Detection System)

7.まとめ

SQLインジェクションの被害としては、「情報漏洩」や「Webサイトの改ざん」があります。
被害に遭わないように、しっかりと対応していきましょう!!

GitHubで編集を提案

Discussion