• 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(民族)中。

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

  • 相关阅读:
    ENode 1.0
    ENode 1.0
    ENode 1.0
    canvas转图片
    Canvas API
    微信 js api[转]
    Dicom格式文件解析器[转]
    跟我学AngularJS:全局变量设置之value vs constant vs rootscope vs 服务[转]
    angularJS 事件广播与接收[转]
    RequireJs
  • 原文地址:https://www.cnblogs.com/wcl2017/p/7136374.html
Copyright © 2020-2023  润新知