【发布时间】:2020-11-23 07:59:50
【问题描述】:
我想知道 fromSqlRaw 方法有多安全。我在我的代码中执行以下操作,其中人员 ID 是方法本身的参数:
string sql = String.Format("SELECT * FROM [users].[user] WHERE Id LIKE {0}", id)
var list = this.context.Person.FromSqlRaw<Person>(sql).ToList();
这段代码对 SQL 注入安全吗?使用它时我应该知道其他安全漏洞吗?
【问题讨论】:
-
使用“SqlParameter”保护您。不要使用任何其他假设。您的代码将被您或其他人更改,漏洞现在可能不存在,但这不是“偷懒”和不使用 SqlParameter 的原因。 (与编写经过清理的版本相比,您可能花费了更多时间来编写此问题并监控答案!)
-
但是我的做法不是和SqlParameter基本一样吗?
-
请注意,准确的问题无法回答,恕我直言。您没有显示“Id”的类型(尽管我认为它是
string,因为LIKE),即使它是您的函数的参数,也没有任何迹象表明它最终不会出现外部数据。 -
一点也不。据我所知,这里没有消毒代码。即使我们可能会向您指出一些具体的问题,然后如果您修复了这个特定的弱点,通过自己重新发明轮子、反复试验来确保安全并不是一个好习惯,尤其是在您拥有易于使用和体验的情况下- 证明方法供您使用。
-
假设参数 id 是一个字符串。这种方法会容易受到攻击吗?
标签: sql entity-framework entity-framework-core sql-injection