zoukankan      html  css  js  c++  java
  • ADO.NET 占位符(防SQL 注入攻击)

    当在添加程序中注入攻击时在控制台应用程序中可以这样写:

    请输入编号:U006

    请输入用户名:无敌

    请输入密码:1234

    请输入昵称:呵呵

    请输入性别:True

    请输入生日:2000-1-1

    请输入民族:N004');update Users set PassWord='0000';--

    添加成功!

    这样,不仅添加成功一条数据,而且数据库中Users表里的所有数据的密码都被修改成了0000。数据被篡改了,数据库被成功注入攻击。

    那么我们怎么来防御这种注入攻击呢?

    其实很简单,只需要修改下程序,在添加数据的C#语句中使用占位符,把位置占住就可以了。

    C#语句:

    string nation = Console.ReadLine();
    conn.Open();
    cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@a", ucode);
    cmd.Parameters.AddWithValue("@b", username);
    cmd.Parameters.AddWithValue("@c", password);
    cmd.Parameters.AddWithValue("@d", nickname);
    cmd.Parameters.AddWithValue("@e",sex);
    cmd.Parameters.AddWithValue("@f", birthday);
    cmd.Parameters.AddWithValue("@g", nation);
    int count = cmd.ExecuteNonQuery();
    conn.Close();

    使用@XXX 占位符提前占好位置。

    这样这条“N004');update Users set PassWord='0000';--”语句执行时,会被当成一个整体一块被存入列名为Nation(民族)中。

    同时程序维护人员也可以在后台清楚的看到这条数据出现的异常~~~

  • 相关阅读:
    redis的主从复制,读写分离,主从切换
    webpack 教程资源收集
    webpack进阶之插件篇
    Mysql与Redis的同步实践
    通过Gearman实现MySQL到Redis的数据同步
    LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)
    Keepalived+Redis高可用部署(第二版)
    Keepalived+Redis高可用部署
    LVS+Redis部署手册
    知识就是力量(笔记记录)
  • 原文地址:https://www.cnblogs.com/wcl2017/p/7136374.html
Copyright © 2011-2022 走看看