• 第五节 8注入漏洞与参数化查询 简单


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    /* SQL注入漏洞攻周
     * 登陆判断: select * FROM t_users where UserName=... and Password=...,将参数拼到SQL语句中
     * 构造恶意的Password: 1' or '1'='1
     * 防范注入漏洞攻击的方式:不使用SQL语句拼接,通过参数赋值
     * 
     * 查询参数
     * SQL语句使用@UserName表示"此处用参数代替",向SqlCommand的Parameters中添加参数
     * cmd.CommandText = "select * FROM t_user where username=@u AND password=@p";
     * cmd.Parameters.Add(new SqlParameter("u","admin"))
     * cmd.Parameters.Add(new SqlParameter("p","111111"));
     * 参数在SQLServer内部不是简单的字符串替换,sqlserver直接用添加值进行数据比较,因此不会有注入漏洞攻击
     *
     */
    namespace _8注入漏洞与参数化查询
    {
        class Program
        {
            static void Main(string[] args)
            {
                string dataDir = AppDomain.CurrentDomain.BaseDirectory;
                if (dataDir.EndsWith(@"\bin\Debug\")
                    || dataDir.EndsWith(@"\bin\Release\"))
                {
                    dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                    AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
                }
    
                /*Console.WriteLine("请输入用户名:");
                string username = Console.ReadLine();
                Console.WriteLine("请输入密码:");
                string password = Console.ReadLine();
                //输入1' or '1' = '1造成SQL注入漏洞攻击
    
                using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MyProjects\C#net传智播客\第五季ADO.NET\8注入漏洞与参数化查询\8注入漏洞与参数化查询\Database1.mdf;Integrated Security=True;User Instance=True"))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand()) 
                    {
                        //cmd.CommandText = "select count(*) FROM T_User where UserName='"+username+"' AND Password='"+password+"' ";
                        
                        cmd.CommandText = "select count(*) FROM T_User where UserName=@UserName AND Password=@Password ";
                        cmd.Parameters.Add(new SqlParameter("UserName",username));
                        cmd.Parameters.Add(new SqlParameter("Password",password));
    
                        int i = Convert.ToInt32(cmd.ExecuteScalar());
                        if (i > 0)
                        {
                            Console.WriteLine("登陆成功!");
                        }
                        else {
                            Console.WriteLine("登陆失败!");
                        }
                    }
                }*/
    
                /*案例
                
                 用户界面中进行登陆判断,输错三次禁止登陆,用数据库记录ErrorTimes
                 * 数据导入:从文本文件导入用户信息,易错点:
                 * Paramter的重复添加
                 * 
                 * 数据导出,将用户信息导出到文本文件中
                 */
                Console.ReadKey();
            }
        }
    }
    

      

  • 相关阅读:
    SQL-索引的合理规划及索引失效
    SQL-索引分类及创建
    SQL-表数据与约束的增,删,改,查
    SQL-存储过程,
    JQuery对DOM元素操作
    JS基本语法-事件简介及绑定
    JS基本语法-DOM增删改查
    doraemon的python 前段开发 标签的认识及运用
    doraemon的python 索引原因和索引命中
    doraemon的python 数据库2和pymysql
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2378731.html
Copyright © 2020-2023  润新知