gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:58:04 24 4
gpt4 key购买 nike

一般来说,我知道 Linq to SQL 对于 SQL 注入(inject)是安全的,因为它使用 SqlParameter (如 herehere 所述)。
但是 contains 的情况如何? :

StreetRepository.Streets.Where(w => w.Streetname.Contains("Road"))
如果我直接在 SQL Server 中记录查询,我可以看到使用了以下查询:
SELECT [Extent1].[Id] AS [Id], [Extent1].[Streetname] AS [Streetname] 
FROM [dbo].[Streets] AS [Extent1]
WHERE [Extent1].[Streetname] LIKE N'%Road%'
正如我们所看到的,它没有为此查询使用参数。如果我使用以下命令:
StreetRepository.Streets.Where(w => w.Streetname.Contains("Road' OR 1=1"))
我得到:
SELECT [Extent1].[Id] AS [Id], [Extent1].[Streetname] AS [Streetname] 
FROM [dbo].[Streets] AS [Extent1]
WHERE [Extent1].[Streetname] LIKE N'%Road'' OR 1=1%'
在这种情况下,它被双 '' 转义。 .
但这对所有攻击都足够安全吗?我可以放心使用 contains 吗?如果不是,我可以用什么代替 contains ?

最佳答案

参数不仅是防止 SQL 注入(inject)的方法。
LINQ to SQL 知道如何正确转义字符串。所以不用担心,一切都会好的。
无论如何,如果您更喜欢参数,只需将字符串值放入局部变量:

var streetName = "Road";
StreetRepository.Streets.Where(w => w.Streetname.Contains(streetName));

关于C# Linq to SQL 包含安全的 sql 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66043200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com