【发布时间】:2014-02-27 11:36:29
【问题描述】:
我必须为我的项目的每种网络应用程序攻击类型创建两个应用程序。 一种攻击有效,另一种无效。 在编写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();
我只是想确保没有办法对无懈可击的人进行注入攻击。 请告诉我代码是否真的无懈可击。
【问题讨论】:
-
我相信 LINQ 会将查询转换为参数化的 SQL,因此您应该避免 SQL 注入。
-
第二版的LinqToSQL引擎为你生成参数,应该没问题
-
除了sql注入之外,以纯文本格式存储密码然后执行简单的字符串比较从来都不是一个好主意。如果数据库遭到破坏,您的客户的所有密码都将被泄露。相反,存储 SHA-256 或更好的密码哈希,然后比较来自数据库和用户界面的哈希结果。
-
使用 LINQ 有什么缺点吗?为什么人们在大多数应用程序中都使用 sql?
-
我认为主要是基于程序员的习惯和现有知识。
标签: c# asp.net security sql-injection