gpt4 book ai didi

c# - 查询字符串的 SQL 注入(inject)技术

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:16 25 4
gpt4 key购买 nike

我一直在努力确保我的代码不会受到臭名昭著的 SQL 注入(inject)攻击 的影响。问题涉及查询字符串,我正在管理的遗留代码具有适用的内联 SQL 实例:

string query = @"SELECT * FROM [Order] 
WHERE ([Id]=" + Request.QueryString[@"oid"] + ");";

显然那是不好的,它会接受攻击。我的问题是这样就够了吗?

command.Parameters.AddWithValue("@OrderId", Request.QueryString[@"oid"]);

所以现在查询有一个参数,它被传递了一个值。我知道它有某种形式的编码。但是,这是否足够,因为任何恶意攻击者都可以利用该查询字符串?那么我应该对查询字符串进行 Encode 吗?这样它将安全地对其进行编码以避免被进一步利用?

对此事的一些澄清会有所帮助。

最佳答案

is this enough?

否 - 您还需要将查询更改为

string query = @"SELECT * FROM [Order] 
WHERE ([Id]=@OrderId);";

I know it has some form of encoding

不,它使用实际值,但它不会将它注入(inject)到 SQL 语句中。它将其视为文字字符串,因此无法包含将被解释为 SQL 的标点符号或恶意代码。

编辑

我可能误解了 - 如果它包含 URL 编码字符(%20& 等),您可能需要对该值进行 URL 解码,但是无需编码(或解码)即可防止 SQL 注入(inject)。

关于c# - 查询字符串的 SQL 注入(inject)技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670903/

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