.net column

.NET開発者のためのブログメディア
セキュリティ問題

ADO.NETでSqlParameterを使うメリット【SQLインジェクション対策】

2020年04月08日

データベース接続において、インジェクション対策は非常に重要です。サイト上からの入力画面にて悪意ある攻撃者からSQL文を含む文字列が渡された際に、データベースが意図しないデータを返して情報が漏洩してしまう可能性があるからです。ここではその対策として、SqlParameterを利用する方法を紹介します。

SE
インジェクション対策って具体的にどのようにするんですか?
PL
外部からの攻撃に対してデータベースが誤作動をしないように、外部からの入力情報をチェックするといった感じですね。では、有効な対策の一つであるSqlParameterを使ってみましょうか。

SQLインジェクションとは

SQLインジェクションとは、データベースに関するセキュリティ問題のことです。
悪意ある攻撃者から入力された情報の中に、SQL文を含んだ文字列が入っていた場合、データベースがその要求通りにデータを返してしまう、データベースのデータが改ざんや破壊されるといった事態を引き起こします。

ADO.NETにおいてはSqlParameterクラスを利用するのが有効な対策となっています。

どのような場合に発生しやすいか

データベースとの接続を行うSQL文の生成の際に、外部から入力された情報をそのまま文字列として連結している場合に起こりやすいです。入力された情報がSQLのどの部分に当てはまるかを推測されてしまい、意味の通るSQL文を入力値として指定すると、データベースが要求通りにデータを返してしまいます。

ADO.NETのSqlParameterが対策になる理由

インジェクション対策をするためには、外部から入力された情報が不具合を起こさないようにチェックする必要があります。そのために、SQL文の一部となる入力情報に対しては、意図しない情報となっていないか、使用してはならない文字が使われていないかなどのチェックが不可欠です。

自身でチェック処理を作るのもよいですが、ADO.NETにおいては、SqlParameterクラスを使うことでその処理を簡略化することができます。SqlParameterクラスは、SQL文生成に不都合な情報を含んでいる場合、影響のない形式にしてパラメーターとすることができるからです。

SE
外部入力のチェックを確実にしていくのが対策になるんですね。
PL
SqlParameterはその手間を軽減する手段として使えますから、積極的に活用できるようにしたいですね。

SQLインジェクション対策は確実に行う

外部からの攻撃に対して確実な対策をしておかなければ、せっかく作ったサイトを台無しにしてしまいかねません。そのためにも確実なSQLインジェクション対策を講じて、脅威となる攻撃のリスクを軽減していくようにしましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)