小编Pho*_*iex的帖子

C# Linq to SQL 包含安全的 sql 注入

一般来说,我知道 Linq to SQL 对于 SQL 注入是安全的,因为它正在使用SqlParameter(如此此处所述)。

但它看起来如何contains

StreetRepository.Streets.Where(w => w.Streetname.Contains("Road"))
Run Code Online (Sandbox Code Playgroud)

如果我直接在 SQL Server 中记录查询,我可以看到使用了以下查询:

SELECT [Extent1].[Id] AS [Id], [Extent1].[Streetname] AS [Streetname] 
FROM [dbo].[Streets] AS [Extent1]  
WHERE [Extent1].[Streetname] LIKE N'%Road%'
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,它没有为这个查询使用参数。如果我使用以下命令:

StreetRepository.Streets.Where(w => w.Streetname.Contains("Road' OR 1=1"))
Run Code Online (Sandbox Code Playgroud)

我得到:

SELECT [Extent1].[Id] AS [Id], [Extent1].[Streetname] AS [Streetname] 
FROM [dbo].[Streets] AS [Extent1]  
WHERE [Extent1].[Streetname] LIKE N'%Road'' OR 1=1%'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它由 double 转义''

但这对所有攻击都足够安全吗?我可以放心使用 contains 吗?如果不是,我可以用什么代替contains

c# linq sql-injection linq-to-sql

5
推荐指数
1
解决办法
90
查看次数

标签 统计

c# ×1

linq ×1

linq-to-sql ×1

sql-injection ×1