什麼是sql注入,如何防止sql注入漏洞攻擊

2021-06-16 09:47:34 字數 1681 閱讀 8619

使用者根據系統的程式構造非法的引數從而導致程式執行不是程式設計師期望的惡意sql

語句。使用引數化或儲存過程的sql

就可以避免

sql注入。

以登入為例,假如登入語句是string sql="select count(user.id) from sys_user user where user.user_name='?' and user_pwd = '?' " ,

如果引數 

user_name 

和usre_pwd

沒有經過加密處理

當user_name

為 英文的 

'  則會報

sql錯誤,

「引號內的字串沒有正確結束

」等等。這樣的錯誤如果給前台捕捉了,那麼你的

sys_user

表就管不住了,當引數

user_name or user_pwd 

為 ' or 1=1 -- 時 ,

拼成的sql

語恆成立,像這樣的情況就是一種比較簡單的注入攻擊行為,所 以最好把前台的引數,轉換為一種資料庫用不到的符號或者字串

(不是相關符號或關鍵字

),比如,將英文的符號轉成中文。

例子:

using system;

using system.collections.generic;

using system.linq;

using system.web;

using system.web.ui;

using system.web.ui.webcontrols;

using system.data.sqlclient;

namespace sql注入漏洞攻擊

'and password=''",txtusername.text.trim(),txtpassword.text);

//以上這種拼接sql語句的方法有sql注入漏洞攻擊的問題,如jk' or 1=1--

//如果避免注入漏洞攻擊呢?使用引數的方法或儲存過程的方法

//引數方法

string sql = "select count(*) from t_users where username=@username and password=@password";

using (sqlcommand cmd = new sqlcommand(sql,con))

;cmd.parameters.addrange(pms);

//通過監視發現ado的引數替換的方法避免了漏洞攻擊,他通過 儲存過程實現了把輸入的任何字串作為字串處理的形式

//在sql中,吧'單引號轉移為字串的方法是前面再加乙個單引號

//在sql中的引數都是以@開始的

int r =convert.toint32(cmd.executescalar());//把sql語句送到資料伺服器端執行

con.close();//可以提前關閉連線,提高效率

if (r > 0)

else }}

}}}在查詢語句加上@username和@password這樣的引數,然後再為引數賦值,利用這樣的方法即可以防止漏洞,現在登入的時候再在password裡輸入jk' or 1=1--時不會登入成功,這樣就保證了資料的安全性

小結:引數查詢能夠安全高效的對sql進行條件查詢,所以在以後的開發工程中,盡量使用引數化的sql語句,防止注入漏洞的發生。

什麼是sql注入 如何防止sql注入

sql注入 利用現有應用程式,將 惡意 的sql命令注入到後台資料庫執行一些惡意的操作 造成sql注入的原因是因為程式沒有有效過濾使用者的輸入,使攻擊者成功的向伺服器提交惡意的sql查詢 程式在接收後錯誤的將攻擊者的輸入作為查詢語句的一部分執行,導致原始的查詢邏輯被改變,額外的執行了攻擊者精心構造的...

什麼是SQL注入以及如何防止SQL注入

case 1 模擬使用者登陸案例 1 準備資料 use jt db create table user id int primary key auto increment,username varchar 50 password varchar 50 insert into user values ...

什麼是sql注入,怎麼防止SQL注入?

防止sql注入 什麼是sql注入?如何防止sql注入?sql語句引數化 防止sql注入的示例 from pymysql import connect def main find name input 請輸 物品名稱 建立connection連線 conn connect host localhost...