我想知道是否有可能通過sql-injection攻擊這個簡單的代碼。如何在sp_executesql中注入sql
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)如果沒有,應輸入哪些用戶進入名 VAR列出的錶款中的所有條目(兩列:INT id和字符串名稱)
你可以嘗試看看當你使用'O'Malley'(帶單引號)作爲'name'時會發生什麼。或者是一個包含'--'或類似的東西的名字,可能對SQL來說是特殊的。我認爲/希望它能夠正確逃脫。 –
這是處理,字符'被解碼爲雙''這意味着這個字符在SQL – Jacek