熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

也談ASP.NET站點的安全

2013-11-13 09:53:48  來源: .NET編程 

  如果做一個項目涉及到一個網站的開發站點需要大量的數據輸入和填寫各種的用戶資料一個兄弟對數據輸入沒有太上心對輸入的數據沒有進行必要的處理和過濾結果系統上線可怕的事情發生了第一天站點出現了各種各樣的錯誤站點被數據撐的亂七八糟HTML的數據把站點搞的面目全非第二天站點管理員密碼被修改第三天…日子還在繼續…我可憐的兄弟開始焦頭爛額一

  一次攻擊的例子

  一般的web系統包括開發的web系統都涉及到數據輸入的功能數據輸入是一個在普通不過的操作但對於一個黑客或者蓄意要破壞你系統的人來說小小的數據輸入的文本框裡面蘊藏著很大的攻擊系統的機會
 
  首先也從一個現象談起大家在編寫系統的時候一般都要涉及到登陸很多人是按照下面的方法來編寫登陸代碼的我們結合sql語句來介紹(這裡涉及的sql語句以sql SERVER為准)
 

  dataaccessb Db=new DataAccessB();

  if(dbselect(select*from admin where name=+UernameText+ and pwd=+PasswordText+)RowsCount<=)

  {

  responsewrite(<script>alert(用戶名或密碼錯誤)</script>);

  session[admin]=;

  }

  else

  {

  session[admin]=;

  servertransfer(manageraspx);

  }

  假如是上述的代碼如果侵入者使用一點點非常的技巧就可以輕松的得到一個導致數據庫錯誤判斷的sql語句從而使系統把輸入任何數據的人放入系統管理頁面

  下面來看看到底做了哪些手腳?

  攻擊者只需要在用戶名和密碼處輸入or =就可以使得系統得到一個錯誤的SQL語句系統得到的錯誤語句如下:

  select*from admin where name= OR = and pwd= OR =通過這樣恆成立的SQL語句就可以得到全部的數據按照代碼的判斷系統將認為有符合要求的數據從而進入系統管理界面

  通過諸如此類的方法侵入者可以在任何一個要輸入信息的窗體輸入一些非法的數據從而進入需要密碼才可以進入的系統另外還可以通過在比如查詢頁通過輸入特定的字符得到一些機密的信息等等

  通過上述的介紹不難看出數據的輸入是存在隱患的如果設計的時候不考慮清楚將來可是後患的那如何來安全它們呢?

  二最易上手的三招>>

  作為數據輸入篇關鍵是解決數據輸入安全性的問題那麼我們如何通過必要的手段來把數據輸入這個環節做的盡可能的安全些呢?

  . 對數據庫角色的管理

  我們在使用連接數據庫的時候只要你不是使用指定角色比如aspnet這個角色訪問sql SERVER 或者信任連接那麼都需要在數據庫連接字串裡面加上一個帳戶一般這個帳戶都是SQL SERVER系統內開的一個帳戶在實際的部署過程中很多人都習慣性的把這個帳戶的權限設置成系統管理員或者對好幾個庫都可以操作的角色這樣帶來的危險是一旦此帳號使用的系統被別人注入成功的話別人將可以對數據庫的一個庫或者多個庫發起攻擊造成難以挽回的損失

  建議一個系統一個帳戶和權限權限按照夠用就行越低越安全的准則

  . 給系統加數據驗證控件

  結合上面的例子其實只要開發的時候給我們的輸入文本框簡單的加一個驗證控件就可以解決問題了

  只允許用戶輸入數字不能輸入字母比如下面的數據驗證驗證的方法

  <! 要求輸入值必須是之間的數字

  <asp:rangevalidator MinimumValue=

  maximumvalue= Type=Integer >

  這裡使用了type的屬性告訴系統只接受整數類型的數據另外只能在之間

  另外還有一個辦法就是對於綜合性的數據殊輸入我們可以通過stringreplace()的方式來過濾掉一些諸如= LIKE等等的敏感字符使的輸入的非法數據無法正常的被數據庫所執行

  代碼的正確寫法

  養成一個良好的數據庫訪問代碼的正確寫法將幫助我們減少被數據輸入攻擊的機會

  利用參數的方式來訪問操作數據庫就是一個比較好的方式結合前文提到的那個攻擊例子我們完全可以改造一些代碼使的安全性成倍的增加

  sqldataadapter Auery_Ad = new SqlDataAdapter(SELECT * FROM admin WHERE name = @user AND pwd=@pass the_connection);

  sqlparameter ParamUser = Auery_AdSelectCommandParametersAdd (>>

  @usersqldbvarchar);

  paramuservalue= uernameText;

  sqlparameter ParamPwd = Auery_AdSelectCommandParametersAdd (>>

  @ pass SqlDbVarChar);

  parampwdvalue= PasswordText;

  最後就是要注意一下跨站攻擊跨站攻擊目前 FRAMWORK中也有所完善一般在傳遞一些含有腳本字符的數據的時候系統都會提示發現潛在的危險腳本來防止跨站的攻擊但這個方式也會妨礙我們平時的一些正常的操作和效果

  在nfig文件裡面有如下的配置信息

  <!將validaterequest設為false這樣才能寫入html格式代碼>

  <pages validateRequest=false />

  設置為true的話系統將禁止html格式代碼數據

  三小結

  相信通過上述的規范編寫和防范一般常規的注入式攻擊和數據輸入安全是可以保證的了每一個技術都有自己的特點學會利用這裡技術特點和特性就可以幫助我們解決很多的實際問題安全代碼的編寫是可以找到很多的現成技術和資料的


From:http://tw.wingwit.com/Article/program/net/201311/11897.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.