私たちはASP.NET/C#のWebサイトを持っています。私たちの開発者はアジアの海岸沿いにいて、サイトのフロントエンドに生のSQLを配置していることがわかったばかりです。SQLインジェクションの脆弱性
私は現在、SQLインジェクション攻撃に対して脆弱だと心配しています。誰もがサイト上の脆弱性をどのように検出できるのか、またその扉を閉じる最善の方法は何かを知っていますか?
私たちはASP.NET/C#のWebサイトを持っています。私たちの開発者はアジアの海岸沿いにいて、サイトのフロントエンドに生のSQLを配置していることがわかったばかりです。SQLインジェクションの脆弱性
私は現在、SQLインジェクション攻撃に対して脆弱だと心配しています。誰もがサイト上の脆弱性をどのように検出できるのか、またその扉を閉じる最善の方法は何かを知っていますか?
前から脆弱性を検出しようとすると役立つかもしれないが、実際には、コード、特に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});
再利用を計画する。
この記事を最初にチェックアウト:How To: Protect From SQL Injection in ASP.NET
私はすべてあなたがexlusivelyストアドプロシージャを使用するか、またはあなたがregualr SQLを使用して、偶然にのみそれらを使用して動的にCommandText property
のコンテンツを構築したことがないコマンドがあれば確認してしまいますストアドプロシージャは、正しくパラメータ化された通常のSQLよりもセキュリティを追加しませんが、デプロイメントをより複雑にします。ここでSPROCする必要はありません、IMO。パラメータを正しく使用してください。 –
さて、私はあなたのソースコードを送信するためにそれらを注文すると、コードビューを実行する(または比較的experiend開発者によって行わ1を持っているでしょう。
払い戻しも順調だと思います! –
最初のことは、フロントエンドとバックエンドからすべてのインライン(生の)SQLを削除し、パラメータとして値を渡すだけのストアドプロシージャを使用することです。 –
フロントエンドは...隠された入力やものとしてフォームにありますか? – Corbin
はい、フォーム/ページの入力フィールド – Rup