標籤:indicator comm while 增刪改查 ogr update cti 攻擊 hid
C#中用基本的方法對資料庫進行增刪改查,會被駭客利用,寫入其他的代碼以實現對資料庫的資料進行其他的操作。例如:
對下列資料庫的某個資訊進行修改操作
修改代碼:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.SqlClient;namespace 攻擊_防禦{ class Program { static void Main(string[] args) { //建立 資料庫連接類 SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=asdf;"); //建立 資料庫操作類 SqlCommand cmd = conn.CreateCommand(); //一、顯示Users表中的所有資訊 cmd.CommandText = "select *from Users"; //在資料庫中執行操作 conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) Console.WriteLine(dr["ids"] + "\t" + dr["Username"] + "\t" + dr["password"] + "\t" + dr["nickname"] + "\t" + dr["sex"] + "\t" + dr["birthday"] + "\t" + dr["nation"] + "\t" + dr["class"] + "\t"); conn.Close(); //二、讓使用者選擇要修改的資料 Console.WriteLine(); Console.Write("請輸入要修改資料的使用者名稱:"); string uname = Console.ReadLine(); //在資料庫查詢有無此資訊 cmd.CommandText = "select *from Users where username=‘" + uname + "‘"; bool has = false; conn.Open(); SqlDataReader dr1 = cmd.ExecuteReader(); if (dr1.HasRows) has = true; conn.Close(); //提示有無此資訊,是否進行修改 if (has) { Console.WriteLine("已查到此使用者資訊,請輸入修改後的資訊"); Console.Write("請輸入修改的使用者名稱:"); string xname = Console.ReadLine(); Console.Write("請輸入修改的密碼:"); string xpwd = Console.ReadLine(); Console.Write("請輸入修改的暱稱:"); string xnick = Console.ReadLine(); Console.Write("請輸入修改的性別:"); bool xsex = Convert.ToBoolean(Console.ReadLine()); Console.Write("請輸入修改的生日:"); DateTime xbir = Convert.ToDateTime(Console.ReadLine()); Console.Write("請輸入修改的民族:"); string xnation = Console.ReadLine(); Console.Write("請輸入修改的班級:"); string xcla = Console.ReadLine(); //修改資訊準備操作 cmd.CommandText = "update Users set username=‘" + xname + "‘,password=‘" + xpwd + "‘,nickname=‘" + xnick + "‘,sex=‘" + xsex + "‘,birthday=‘" + xbir + "‘,nation=‘" + xnation + "‘,class=‘" + xcla + "‘ where username=‘" + uname + "‘"; //在資料庫中執行操作 conn.Open(); int i0 = cmd.ExecuteNonQuery(); conn.Close(); //判斷是否修改成功 if (i0 > 0) Console.WriteLine("資料修改成功!"); else Console.WriteLine("資料修改失敗!"); } else Console.WriteLine("查無此資訊。"); Console.ReadLine(); } }}
對資料庫資料進行修改操作
修改後資料庫資料:
=====================================================================================================
如何對資料庫進行字串攻擊?
此時資料庫中資料全部被刪除,為什嗎?
在資料庫中輸入與修改時相同的代碼試試
資料庫讀取到了“delete from Users”字串,並且它之後的所有代碼被“--”注釋掉了,並不會執行,所有資料庫執行了delete語句,刪除了資料庫所有資訊
=====================================================================================================
針對以上情況,如何防禦資料庫被修改?——預留位置
update Users set 後的語句用預留位置代替,比如:set username=‘"+zhangsan+"‘,password=‘"+asdf+"‘ 用set [email protected],[email protected]
代替時,等號後面的單引號也去掉
執行cmd.Parameters.Clera();語句清空集合,然後進行添加,指定預留位置的意義
再次進行攻擊
資料庫的結果為
資料庫資料並沒有刪掉,而刪除語句作為字串被預留位置帶入資料庫中,成功防禦了字串的攻擊
C#-駭客-資料庫訪問-字串的攻擊和防禦