gpt4 book ai didi

c# - .NET 中的 SQL 注入(inject)防护

转载 作者:太空狗 更新时间:2023-10-29 20:45:18 25 4
gpt4 key购买 nike

我通常在 .NET 中编写我的 SQL

sql.Append("SELECT id, code, email FROM mytable WHERE variable = @variable ");

然后做这样的事情:

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["defaultConnection"]].ConnectionString))
{
using (SqlCommand myCommand = new SqlCommand(sql.ToString(), conn))
{
myCommand.Parameters.AddWithValue("@variable", myVariableName");
...

但是当我得到的数据像这样直接来自数据库时,我是否也应该执行此 addParameter 操作?

likesql.Append(string.Format("SELECT group_id, like_text FROM likeTerms ORDER BY group_id ASC "));

DataTable dtLike = SqlHelper.GetDataTable(likesql.ToString());

foreach (DataRow dr in dtLike)
{
buildsql.Append(".... varId = " + dr["group_id"].ToString() + "...");

...

这可以接受吗?什么是最佳实践?

最佳答案

你应该总是使用参数:

  • 数据库中的值来自哪里?
  • 在您的示例中,您能相信“group_id”没有被修改为您不期望的内容吗?

不相信任何人

数据库访问受限的人可以直接注入(inject)其他地方使用的字段吗?

性能

此外,它有助于提高性能。缓存的执行计划将忽略参数的值,这意味着每次参数更改时您都可以避免服务器重新编译查询。

关于c# - .NET 中的 SQL 注入(inject)防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484118/

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