私はパブリックサイトをセットアップしています。最初に頭に浮かぶのはSQLインジェクションです。保存しているテキストフィールドがいくつかあり、linqを使用してデータベースの更新/書き込みを行っています。 linqを使用しても安全ですか?
この例では、ユーザーアカウントを作成しています。
Data.MemberRegistrationDataContext context = new MemberRegistrationDataContext();
Data.tbl_Member_UserProfile profile = new tbl_Member_UserProfile();
profile.SSN = Convert.ToDecimal(Session["tempMemberSSN_Registration"]);
profile.UserName = userName;
profile.Password = password;
profile.EmailAddress = email;
profile.QuestionID = qID;
profile.QuestionResponse = securityAnswer;
profile.LastModDt = DateTime.Now;
profile.LastModBy = "web";
context.tbl_Member_UserProfiles.InsertOnSubmit(profile);
context.SubmitChanges();
この例はパスワードを変更しています
MemberRegistrationDataContext dc = new MemberRegistrationDataContext();
var mProfileRecord = dc.tbl_Member_UserProfiles.Single(c => c.SSN == sSSN);
mProfileRecord.Password = sNewPassword;
dc.SubmitChanges();
これらは安全ですか? LINQは自動的に生成するSQLをパラメーター化しますか?
はい、LINQはSQLインジェクションの停止に役立ちます。
LINQ to SQLは、SQLパラメーターを介してすべてのデータをデータベースに渡します。したがって、SQLクエリは動的に構成されますが、SQLインジェクション攻撃の最も一般的な原因から保護するパラメーターによって、サーバー側で値が置き換えられます。
また、いくつかの情報については LINQを使用してSQLインジェクション攻撃を簡単に排除する を参照してください。
あなたは行ってもいいです。 Linqは、データベースに送信するデータをパラメーター化します。
Logプロパティを使用して、何が起こっているかを確認します:dc.Log = Console.Out;
これは、発行されたSQLが、任意のSQLの実行に悪用できない名前付きパラメーターを使用しているためです。