zoukankan      html  css  js  c++  java
  • ADO学习笔记之注入漏洞与参数化查询

    ADO学习笔记之注入漏洞与参数化查询

    作为新手,在学习ADO程序时,使用 sql 语言查询数据时,很容易写类似如下代码:

     

                using (SqlConnection con = new SqlConnection(ConnectionString))
                {
                    string cmdText = "select Flag from UserLogin where UserName='@UserName' and UserPwd='@Password'";    
                    cmdText.Replace("@UserName",userName);
                    cmdText.Replace("@Password",userPwd);
                    using (SqlCommand cmd = new SqlCommand(cmdText, con))
                    {
                con.Open(); ...... con.Close(); } }

     

    在这里,通过String的Replace方法,用目标字符串替换原字符串中的占位符(不处理替换)。那么问题来了。如果userName为任意值,但userPwd="1‘ or 1='1",这样cmdTex的值就是"select Flag from UserLogin where UserName='@UserName' and UserPwd='1’ or 1='1'" 很明显,查询结果恒为真,这样即便不知道用户与密码也可以随时访问数据库。

    为了解决这个问题,比较好的方法就是使用参数化查询,看下面的代码:

                using (SqlConnection con = new SqlConnection(ConnectionString))
                {
                    string cmdText = "select Flag from UserLogin where UserName=@UserName and UserPwd=@Password";
                    using (SqlCommand cmd = new SqlCommand(cmdText, con))
                    {
                        cmd.Parameters.Add(new SqlParameter("UserName", userName));
                        cmd.Parameters.Add(new SqlParameter("Password", userPwd));
                        con.Open();
                        ......
                        con.Close();
                    }
                }

    在原字符串中也是用@UserName与@Password占位,但注意这里的占位符没有用 引号 引起来,再通过 SqlParameter这个类对占位符进行替换(处理后替换)。替换时对应的是一对一替换(@UserName对应UserName,@Password对应Password),并且原字符串有多少个查询参数,那么替换后也就只有这么多参数(像上面的例子,不经过处理替换导致原字符串中的参数增加了,增加的参数就是 ‘1’ )。

    在写ADO代码时,通过参数化查询可以有效的避免查询漏洞。

     

  • 相关阅读:
    当我有一台服务器时我做了什么
    git 安装及基本配置
    关于大厂面试中问到的二十几个 HTTP 面试题
    日问周刊 | 全栈面试汇总 | 第七期
    dockerfile 最佳实践及示例
    面试官:如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改
    Nginx 反向代理时获取用户的真实 IP
    Go 语言实现 HTTP 层面的反向代理
    Go 语言中的 Http 路由基础
    Json Schema
  • 原文地址:https://www.cnblogs.com/SilentCode/p/4886424.html
Copyright © 2011-2022 走看看