以下代码是否可以进行注入攻击?

时间:2014-02-27 11:36:29

标签: c# asp.net security sql-injection

我必须为我的项目的每个Web应用程序攻击类型创建两个应用程序。 一个攻击有效,另一个不攻击。 在编写sql注入代码时,我提出了以下代码:

脆弱

EmpTable result = ctx.Database.SqlQuery<EmpTable>("Select * from EmpTable where username = '" + TxtUsername.Text + "'and password = '" + TxtPassword.Text + "'").FirstOrDefault();

并且,无懈可击:

EmpTable result = (from reff in ctx.EmpTables.Where(p => (p.Username == TxtUsername.Text) && (p.Password == TxtPassword.Text)) select reff).FirstOrDefault();

我只是想确保无法对无法攻击的人进行注射攻击。 请告诉我代码是否真的无懈可击。

1 个答案:

答案 0 :(得分:1)

是的,在第二种情况下,我认为这是无懈可击的,因为您将责任传递给LINQ(和实体框架,或NHibernate,或其他类似的ORM工具)以在数据库上执行查询。它必须安全地处理你的SQL,因为它提供了这个任务。

在第一种情况下,您应该使用Parameter来避免SQL注入,例如:

ctx.Database.ExecuteSqlCommand(@"select * from EmpTable where username = @user and password = @pass", 
                                new SqlParameter("user", TxtUsername.Text), 
                                new SqlParameter("pass", TxtPassword.Text));

Obs:我没试过