zoukankan      html  css  js  c++  java
  • 第五节 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();
            }
        }
    }
    

      

  • 相关阅读:
    无忌缩略语及常用语词典
    大家都说不建议直接使用 @Async 注解?为什么??
    Comparable 和 Comparator 接口的区别?还傻傻分不清?
    Apache Log4j 漏洞影响有多大?Google 调查报告出炉!
    Logback 也爆雷了,惊爆了。。。
    Log4j 2.3.1 发布!又是什么鬼??
    Spring Boot 实现读写分离,还有谁不会??
    Spring Cloud 2020.0.5 发布,新特性一览,别掉队了!
    终于!Spring Boot 最新版发布,一招解决 Log4j2 核弹级漏洞!
    Log4j 2 杀不死 Java!
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2378731.html
Copyright © 2011-2022 走看看