gpt4 book ai didi

asp.net - 这是防 Sql 注入(inject)的 Asp.net 代码吗?

转载 作者:行者123 更新时间:2023-12-02 21:00:19 25 4
gpt4 key购买 nike

问题:我有一个包含文本值的表单,以及一个必须基于文本值的值返回字符串查询的函数。

解决方案:我创建了一个带有参数的 SQLCommand 查询,然后将 SQLCommand.CommandText 放入一个字符串中,然后将其返回(给将要处理该查询的业务逻辑)

主要问题:它是sql注入(inject)证明吗?

代码示例:

sQuery = "select * from xy where x like '%@txtNameParameter%'";

SqlCommand cmd = new SqlCommand(sQuery);

cmd.Parameters.Add("@txtNameParameter", SqlDbType.VarChar);
cmd.Parameters["@txtNameParameter"].Value = txtName.Text;

string query = cmd.CommandText;
return query;

子问题(如果主要问题没问题):我是否应该将单选按钮和下拉菜单的值也放入参数中,还是它们是防注入(inject)的?

最佳答案

您在这里所做的事情是防注入(inject)的,因为您没有注入(inject)任何东西。事实上,你的参数甚至没有被使用(因为对它的唯一引用是在字符串文字中,所以 SQL 解析器甚至不会看到你试图在哪里使用该参数,因为它会将其视为字符串文字。)

您可能需要将该行代码更改为:

sQuery = "select * from xy where x like '%'+@txtNameParameter+'%'";

这将使 SQL 看起来像这样:

select * from xy where x like '%'+@txtNameParameter+'%'

这只是在 SQL 命令中需要字符串的地方进行字符串连接。

但是,您对之后所做的事情的描述可能会让所有这些都浮出水面。我无法理解为什么您只想将查询的 where 子句发送到业务层。

此外,子字符串 WHERE 子句不会包含您放入参数中的数据。所以你不会得到比返回更多的好处

return "where x like '%@txtNameParameter%'";

参数值丢失。

关于asp.net - 这是防 Sql 注入(inject)的 Asp.net 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581525/

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