亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

淺入淺出SQL注入腳本安全 -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.msguai.com - 電腦資料】

   

    已經(jīng)開始了學(xué)習(xí)牛腩新聞發(fā)布系統(tǒng),在講后臺(tái)代碼的時(shí)候講了一些重構(gòu)SQLHelper 的知識(shí),存儲(chǔ)過程和觸發(fā)器等,這些以前都是接觸過的,

淺入淺出SQL注入腳本安全

。而 SQL 注入是以前沒有注意過的,所以停下來總結(jié)學(xué)習(xí)一下 SQL 注入。

    首先什么是 SQL 注入呢?

    實(shí)戰(zhàn)篇 ~~~~~~~~~~

    SQL 注入概念

    所謂SQL注入,就是通過把SQL命令插入到Web 表單 提交或輸入域名或頁面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的 SQL 命令,比如先前的很多影視網(wǎng)站泄露 VIP 會(huì)員密碼大多就是通過 WEB 表單遞交查詢字符暴出的,這類表單特別容易受到 SQL 注入式攻擊。

    通俗的說就是,當(dāng)在瀏覽器網(wǎng)頁中輸入一些可能是查詢字符串的一部分時(shí),這樣就使得惡意破壞人可以指導(dǎo)一個(gè)網(wǎng)站的連接數(shù)據(jù)庫的名稱和里面的表,這就是由于拼接字符串引起的。在新聞發(fā)布系統(tǒng)中的小例子:

    新聞?lì)悇e類插入函數(shù)的代碼

public bool Insert(string caName)        {  bool flag = false;  string sql = "insert into category(name) values('" + caName + "')";};  int res = sqlhelper.ExecuteNonQuery(sql, CommandType.Text);  if (res > 0) //代碼段,連續(xù)兩次按table鍵顯示代碼段  {   flag = true;  }  return flag;        }

    如果是這樣的話:在網(wǎng)頁輸入框中輸入類似

    ——       娛樂新聞 ')delete category where id=3--  的語句就會(huì)發(fā)生 SQL 注入。

   

    這樣的話,就會(huì)在插入娛樂新聞的時(shí)候同時(shí)刪除 id 為 3 的那條類別。這就是SQL 注入,造成了數(shù)據(jù)庫的不安全,是因?yàn)檎闷唇恿俗址?nbsp;insert intocategory(name) values( ' 娛樂新聞 ' ) delete category whereid=3-

    解決方法是使用參數(shù),將 sql 語句該成為:

/// <summary> /// 增加類別  /// </summary>  /// <param name="caName">新聞?lì)悇e名稱</param>  /// <returns></returns>  public bool Insert(string caName)  {   bool flag = false;   string sql = "insert into category(name) values(@caName)";   SqlParameter[] paras = new SqlParameter[] {        new SqlParameter ("@caName",caName )};   int res = sqlhelper.ExecuteNonQuery(sql, paras, CommandType.Text); //防止SQL注入   if (res > 0) //代碼段,連續(xù)兩次按table鍵顯示代碼段   {   flag = true;   }   return flag;  }

    參數(shù)化查詢?yōu)槭裁纯梢苑乐?nbsp;SQL 注入?

1 、參數(shù)過濾,數(shù)據(jù)庫中實(shí)際執(zhí)行的 sql 語句

    2 、執(zhí)行計(jì)劃重用

    因?yàn)閰?shù)化查詢可以重用執(zhí)行計(jì)劃,并且如果重用執(zhí)行計(jì)劃的話, SQL所要表達(dá)的語義就不會(huì)變化,所以就可以防止 SQL 注入,如果不能重用執(zhí)行計(jì)劃,就有可能出現(xiàn) SQL 注入,存儲(chǔ)過程也是一樣的道理,,因?yàn)榭梢灾赜脠?zhí)行計(jì)劃,

電腦資料

淺入淺出SQL注入腳本安全》(http://www.msguai.com)。

    擴(kuò)展篇~~~~~~~~~~

    SQL 注入原因

    SQL 注入的產(chǎn)生原因通常表現(xiàn)在以下幾方面:

    1 、不當(dāng)?shù)念愋吞幚?/p>

    2 、不安全的數(shù)據(jù)庫配置

    3 、不合理的查詢集處理

    4 、不當(dāng)?shù)腻e(cuò)誤處理

    5 、轉(zhuǎn)義字符處理不合適

    6 、多個(gè)提交處理不當(dāng)

    SQL 注入攻擊指的是通過構(gòu)建特殊的輸入作為參數(shù)傳入 Web 程序,而這些輸入大都是 SQL 語法里的一些組合,通過執(zhí)行 SQL 語句進(jìn)而執(zhí)行 攻擊者所要的操作,其主要原因是程序沒有細(xì)致地過濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。

    SQL注入的影響

    當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動(dòng)態(tài)sql語句以訪問數(shù)據(jù)庫時(shí),會(huì)發(fā)生sql注入攻擊。如果代碼使用存儲(chǔ)過程,而這些作為包含未篩選的用戶輸入的字符串來傳遞,也會(huì)發(fā)生sql注入。sql注入可能導(dǎo)致攻擊者使用應(yīng)用程序登陸在數(shù)據(jù)庫中執(zhí)行命令。相關(guān)的SQL注入可以通過測試工具pangolin進(jìn)行。如果應(yīng)用程序使用特權(quán)過高的帳戶連接到數(shù)據(jù)庫,這種問題會(huì)變得很嚴(yán)重。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造動(dòng)態(tài)sql命令,或者作為存儲(chǔ)過程的輸入?yún)?shù),這些表單特別容易受到sql注入的攻擊。而許多網(wǎng)站程序在編寫時(shí),沒有對(duì)用戶輸入的合法性進(jìn)行判斷或者程序中本身的變量處理不當(dāng),使應(yīng)用程序存在安全隱患。這樣,用戶就可以提交一段數(shù)據(jù)庫查詢的代碼,根據(jù)程序返回的結(jié)果,獲得一些敏感的信息或者控制整個(gè)服務(wù)器,于是sql注入就發(fā)生了。

    防護(hù)SQL注入

    既然存在SQL注入

的影響,那么怎樣防止SQl注入呢?

    1.永遠(yuǎn)不要信任用戶的輸入。對(duì)用戶的輸入進(jìn)行校驗(yàn),可以通過正則表達(dá)式,或限制長度;對(duì)單引號(hào)和

    雙"-"進(jìn)行轉(zhuǎn)換等。

    2.永遠(yuǎn)不要使用動(dòng)態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲(chǔ)過程進(jìn)行數(shù)據(jù)查詢存取。

    3.永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫連接。

    4.不要把機(jī)密信息直接存放,加密或者h(yuǎn)ash掉密碼和敏感的信息。

    5.應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯(cuò)誤信息對(duì)原始錯(cuò)誤信息進(jìn)行包裝

    總結(jié)篇~~~~~~~~~~

    SQL注入,一聽上去是多么專業(yè)的名詞啊!可以如果要是有人故意因?yàn)檫@點(diǎn)漏洞就侵入數(shù)據(jù)庫就不好了。同時(shí)也有各種各樣的人在探尋SQL注入的方法,他們的手法相當(dāng)靈活,讓我們防不勝防。而我們的防護(hù)能不能根據(jù)具體情況進(jìn)行分析,構(gòu)造巧妙的SQL語句,從而成功防護(hù)了想要進(jìn)行SQL注入的數(shù)據(jù)庫才是高手與“菜鳥”的區(qū)別。

    ​

最新文章