Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年12月15日
最終更新日:2013年12月26日

Like 句に対する SQL インジェクション対策(ASP.NET,C#, VB.NET 編)

概要

SQL インジェクションは、プレースホルダを利用することで対策が可能ですが、Like 句のワイルドカードついては、ほとんどの情報元が「別途エスケープが必要です」としか記載されていません。

この記事では、SQL Server に対するワイルドカードのエスケープ方法の、C# と VB.NET の具体的例を紹介します。動作確認環境は、.NET Framework 4.5 + SQL Server 2012 ですが、最近の環境なら問題なく動作すると思います。

また、SQL インジェクションの対策としては、LINQ が推奨されますが、理解しやすいように、先に DataReader のサンプルを紹介後、LINQ のサンプルを紹介します。

サンプルアプリケーションの概要は、以下の通りです。

search

SQL Server のワイルドカードのエスケープ

SQL Server のワイルドカードは、以下のようになります。対象となる SQL Server は現時点で、SQL Server 2005 ~ 2012 までです。

% 0個以上の文字
_ 1文字
[] []内に指定した任意の文字

LIKE (Transact-SQL)

SQL Server でワイルドカードをエスケープするには、エスケープ対象となるワイルドカード文字(% _ [) を [] で囲むことです。こうすることで、% _ [ を文字列として検索することができるようになります。

なお、以下のような ESCAPE 句を使用することにより、#% #_ #[ と簡単にエスケープできるようになります。

DataReader を使用した例

・Search.aspx (C#)

・Search.aspx (VB.NET)

・Result.aspx (C#)

・Result.aspx (VB.NET)

LINQ を使用した例

LINQ では LIKE 句ではなく Contains メソッドを使用することにより、LIKE 句と同じ検索を行うことができます。また、ワイルドカードも自動的にエスケープ処理されます。

・Search.aspx (C#)

・Search.aspx (VB.NET)

・Result.aspx (C#)

・Result.aspx (VB.NET)


スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA