【发布时间】:2015-11-25 09:43:12
【问题描述】:
我想知道是否可以通过 sql-injection 来攻击这个简单的代码。
string name = Console.ReadLine();
using (var db = new Db())
{
var result = db.Models.Where(p => p.Name == name);
foreach (var item in result)
Console.WriteLine(item.Name);
}
EntityFrameork 执行此命令使用 sp_executesql 存储过程,其中名称是参数。
exec sp_executesql N'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name]
FROM [dbo].[Models] AS [Extent1]
WHERE ([Extent1].[Name] = @p__linq__0) OR
(([Extent1].[Name] IS NULL) AND (@p__linq__0 IS NULL))'
,N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'jacek'
我的问题是:
1) 此解决方案是否再次提供 100% 的防御 SQL 注入?
2) 如果不是,用户应该在 name var 中输入什么来列出表 Models 中的所有条目(两列:int id 和字符串名称)
【问题讨论】:
-
您可以尝试看看将
O'Malley(带单引号)用作name时会发生什么。或者包含--或可能对SQL 特殊的类似内容的名称。我认为/希望它会被正确转义。 -
这个处理好了,char '被解码为double '' sql中这个char是什么意思
标签: .net entity-framework security model-view-controller sql-injection