2011-12-16 18 views
3

私たちはASP.NET/C#のWebサイトを持っています。私たちの開発者はアジアの海岸沿いにいて、サイトのフロントエンドに生のSQLを配置していることがわかったばかりです。SQLインジェクションの脆弱性

私は現在、SQLインジェクション攻撃に対して脆弱だと心配しています。誰もがサイト上の脆弱性をどのように検出できるのか、またその扉を閉じる最善の方法は何かを知っていますか?

+1

最初のことは、フロントエンドとバックエンドからすべてのインライン(生の)SQLを削除し、パラメータとして値を渡すだけのストアドプロシージャを使用することです。 –

+0

フロントエンドは...隠された入力やものとしてフォームにありますか? – Corbin

+0

はい、フォーム/ページの入力フィールド – Rup

答えて

6

から脆弱性を検出しようとすると役立つかもしれないが、実際には、コード、特にDbCommand、SqlCommandなどに関連するすべてのコードを調べる必要があります。明らかにわかっているように、キーポイントは決してユーザー入力をクエリに連結するのではなく、パラメータを設定することです。例えば、あなたが持っている場合:

using(var cmd = conn.CreateCommand()) { 
    cmd.CommandText = "delete from Orders where id = " + id; 
    cmd.ExecuteNonQuery(); 
} 
このパラメータ化を簡単に行うことができます。

は、Dapperのドットネットのようなツールは、あなたのようなことを行うことができます:

以下コード、主にコピー&ペーストしているが、完全に射出安全であり、query-ことができます
conn.Execute("delete from Orders where id = @id", new {id}); 

再利用を計画する。

1

この記事を最初にチェックアウト:How To: Protect From SQL Injection in ASP.NET

私はすべてあなたがexlusivelyストアドプロシージャを使用するか、またはあなたがregualr SQLを使用して、偶然にのみそれらを使用して動的にCommandText property

のコンテンツを構築したことがないコマンドがあれば確認してしまいます
+3

ストアドプロシージャは、正しくパラメータ化された通常のSQLよりもセキュリティを追加しませんが、デプロイメントをより複雑にします。ここでSPROCする必要はありません、IMO。パラメータを正しく使用してください。 –

4

これらは、特にSQLインジェクションのために、脆弱性のためのウェブサイトをスキャンするためのツールであるScrawlrまたはAcunetix

を見てください。別の方法は、PCI-DSS準拠企業の1社にサインアップすることです。私たちはSecurityMetricsを使用しており、通常は銀行が割引を提供しています。

+0

便利なリンクだが、それらが何であるかを説明するための2つの文章が役に立つので、リンク先を見るためにリンクをたどる必要はない。 –

+0

@DavidePirasありがとう、私はこれを先にしておくべきだった。 –

1

さて、私はあなたのソースコードを送信するためにそれらを注文すると、コードビューを実行する(または比較的experiend開発者によって行わ1を持っているでしょう。

+0

払い戻しも順調だと思います! –

関連する問題