SQLインジェクション攻撃防止:どこから始めますか

私は自分のサイトをSQLインジェクション攻撃から保護することを目指しています。誰もが、サイトをASP.NETサイト(C#、Webフォーム)での攻撃に対して安全なものにするための良いリンクを持っていますか?

編集:

私はEntity Frameworkを使用していることを指摘しておきます

7

7 答え

最初の防衛線は、動的SQL を使用しないことです。

常にパラメータ化されたクエリを使用してください。

SQLインジェクションについての OWASPページをご覧ください。

14
追加された

次のリソースを参照してください。

基本的に、Odedはすでに指摘しているように、SQL文を連結することを止めるために、特にユーザーがテキストボックスに入力したデータを含む場合は、ADO.NETのパラメータ化クエリを使用します。

4
追加された
3
追加された

This is a great series that covers the top 10 security threats to web applications and how to mitigate them using ASP.net: http://www.troyhunt.com/2010/05/owasp-top-10-for-net-developers-part-1.html

2
追加された
私はこれらから作られた電子ブックにリンクする傾向があります。しかし、脆弱性の1つのみが、OPが尋ねたSQLインジェクションです。
追加された 著者 Oded,
追加された 著者 Zach Green,

それは簡単です。ほとんどの注入法は次のようなコードから来ています:

var myQuery="SELECT something FROM somewhere WHERE somefield="+userSuppliedData;
//execute myQuery against db
//now suppose userSuppliedData=="'';DROP TABLE somewhere;"

このような手作業でSQL文を実行すると、危険にさらされます。 ORMまたはパラメータ化されたクエリの使用を検討してください。

1
追加された

次のようなパラメータでデータを取得します。

string str = "insert into CustomerHistoryDD(logo,ceoPicture,ceoProfilePicture,coverPhoto,employee1,employee2,employee3,employee4) values(@param1,@param2,@param3,@param4,@param5,@param6,@param7,@param8)";
        SqlCommand cmd = new SqlCommand(str, con);
        con.Open();
        cmd.Parameters.AddWithValue("@param1", link);
        cmd.Parameters.AddWithValue("@param2", link1);
        cmd.Parameters.AddWithValue("@param3", link2);
        cmd.Parameters.AddWithValue("@param4", link3);
        cmd.Parameters.AddWithValue("@param5", tb_Emp1.Text);
        cmd.Parameters.AddWithValue("@param6", tb_Emp2.Text);
        cmd.Parameters.AddWithValue("@param7", tb_Emp3.Text);
        cmd.Parameters.AddWithValue("@param8", tb_Emp4.Text);
        cmd.ExecuteNonQuery();
        con.Close();
        lbl_msg.Text = "Data Saved Successfully";
1
追加された

パラメータ付きのストアドプロシージャを使用し、可能であればインラインSQLを避けてください...

0
追加された