代码之家  ›  专栏  ›  技术社区  ›  Psytronic

使用SQL参数绑定是否意味着可以从输入中直接输入文本?

  •  3
  • Psytronic  · 技术社区  · 14 年前

    正如标题所说,如果我使用的是SQL参数,即

    SQLCommand cmd = new SQLCommand("select * from users where username = @user and password = @pass limit 1", Cxn);
    
    cmd.Parameters.Add("@user", SqlDbType.VarChar):
    cmd.Parameters.Add("@pass", SqlDbType.VarChar):
    

    我可以直接从输入中输入参数值吗?

    cmd.Parameters["@user"].value = txtBxUserName.text;
    cmd.Parameters["@pass"].value = txtBxPassword.text;
    

    当您寻找与转义字符串等相关的内容时,这似乎是建议的,最终的答案是让参数绑定来完成它。但这能防止注射攻击之类的吗?还是仍然需要执行服务器端验证?

    来自一个高度定向的PHP背景,直接将文本输入到查询中与我身体的每一根纤维都相悖:p

    3 回复  |  直到 14 年前
        1
  •  7
  •   Yellowfog    14 年前

    您给出的示例在SQL注入方面是安全的。参数化查询唯一潜在的SQL注入问题是它们是否处理本身使用动态SQL的proc。

    当然,无论是否参数化,您仍然需要考虑XSS漏洞。

        2
  •  1
  •   Thea Ray Suelzer    14 年前

    是的,这是使用.net在数据库中存储数据的安全方法。SQL参数提供类型检查和验证。因为它们被视为一个文本值,而不是一个可执行代码,这就阻止了sql注入。

        3
  •  0
  •   Dr Herbie    14 年前

    逃出所有特殊角色并防止注入攻击。这就是为什么参数是推荐的方法。