Web應(yīng)用安全 一 SQL注入

SQL注入

注入攻擊漏洞砖织,例如SQL藏斩,OS以及LDAP注入。這些攻擊發(fā)生在當(dāng)不可信的數(shù)據(jù)作為命令或者查詢語句的一部分劫狠,被發(fā)送給解釋器的時候。攻擊者發(fā)送的惡意數(shù)據(jù)可以欺騙解釋器永部,以執(zhí)行計劃外的命令或者在未被恰當(dāng)授權(quán)時訪問數(shù)據(jù)独泞。

SQL注入.png

我是否存在注入漏洞?

  • 檢測應(yīng)用程序是否存在注入漏洞的最好辦法就是確認(rèn)所有解釋器的使用都明確地將不可信數(shù)據(jù)從命令語句或查詢語句中區(qū)分出來。如果可能的話苔埋,在許多情況下懦砂,建議避免解釋器,或禁用它(如组橄,XXE)荞膘。對于SQL調(diào)用,這就意味著在所有準(zhǔn)備語句(prepared statements)和存儲過程(stored procedures)中使用綁定變量(bind variables)玉工,并避免使用動態(tài)查詢語句羽资。
  • 檢查應(yīng)用程序是否安全使用解釋器的最快最有效的方法是代碼審查。代碼分析工具能幫助安全分析者找到使用解釋器的代碼并追蹤應(yīng)用的數(shù)據(jù)流遵班。滲透測試者通過創(chuàng)建攻擊的方法來確認(rèn)這些漏洞削罩。
    可以執(zhí)行應(yīng)用程序的自動動態(tài)掃描器能夠提供一些信息,幫助確認(rèn)一些可利用的注入漏洞是否存在费奸。然而弥激,掃描器并非總能達(dá)到解釋器,所以不容易檢測到一個攻擊是否成功愿阐。不恰當(dāng)?shù)腻e誤處理使得注入漏洞更容易被發(fā)現(xiàn)微服。

攻擊案例場景

  • 場景#1:應(yīng)用程序在下面存在漏洞的SQL語句的構(gòu)造中使用不可信數(shù)據(jù):
    String query = "SELECT * FROM accounts WHEREcustID='" + request.getParameter("id") +"'";
  • 場景#2:同樣的,框架應(yīng)用的盲目信任缨历,仍然可能導(dǎo)致查詢語句的漏洞以蕴。(例如:Hibernate查詢語言(HQL)):
    Query HQLQuery= session.createQuery(“FROM accounts
    WHERE custID='“ + request.getParameter("id") + "'");
    在這兩個案例中糙麦,攻擊者在瀏覽器中將“id”參數(shù)的值修改成’ or’1’=’1。如:
    http://example.com/app/accountView?id=' or '1'='1
    這樣查詢語句的意義就變成了從accounts表中返回所有的記錄丛肮。更危險的攻擊可能導(dǎo)致數(shù)據(jù)被篡改甚至是存儲過程被調(diào)用赡磅。

如何防止注入漏洞?

防止注入漏洞需要將不可信數(shù)據(jù)從命令及查詢中區(qū)分開。

  1. 參數(shù)化語句:使用占位符或綁定常量來向SQL查詢提供參數(shù)宝与,可避免或解決很多在應(yīng)用中經(jīng)常見到的SQL注入問題焚廊,還有擁有相比現(xiàn)代數(shù)據(jù)庫效率更高的優(yōu)勢(數(shù)據(jù)可以根據(jù)提供的預(yù)處理語句來優(yōu)化查詢,從而提高后續(xù)查詢的性能)习劫。
  2. 輸入驗證:測試應(yīng)用接受的輸入以保證其符合應(yīng)用中定義標(biāo)準(zhǔn)的過程咆瘟。可以簡單到將參數(shù)限制成某種類型诽里,也可以復(fù)雜到使用正則表達(dá)式或業(yè)務(wù)邏輯來驗證輸入
  • 白名單驗證(包含驗證或者正驗證): 數(shù)據(jù)類型袒餐、 數(shù)據(jù)大小、 數(shù)據(jù)范圍谤狡、 數(shù)據(jù)內(nèi)容
  • 黑名單:常用方法為正則表達(dá)式(推薦使用白名單)
  1. 編碼輸出:對在應(yīng)用的不同模塊或部分間傳遞的內(nèi)容進(jìn)行編碼(根據(jù)不同的數(shù)據(jù)編碼進(jìn)行替換后傳輸)
  2. 規(guī)范化:將輸入簡化成便準(zhǔn)簡單的形式(通常最容易實現(xiàn)的一種方法是拒絕所有不符合規(guī)范格式的輸入)
  3. 通過設(shè)計來避免SQL注入的危險:
  • 使用存儲過程:可以防止或減輕SQL注入影響的設(shè)計技術(shù)(幾乎可以杜絕SQL注入)灸眼;
    存儲過程非常有助于減輕潛在SQL注入漏洞的嚴(yán)重影響,因為大多數(shù)數(shù)據(jù)庫中使用存儲過程時可以在數(shù)據(jù)庫層配置訪問控制墓懂;發(fā)現(xiàn)SQL注入時幢炸,可以通過正確的配置來保證攻擊者無法訪問數(shù)據(jù)的敏感信息。
  • 使用抽象層:常見做法是為表示拒贱、業(yè)務(wù)邏輯宛徊、和數(shù)據(jù)訪問定義不同的層,從而將每一層的實現(xiàn)從總體設(shè)計中抽象出來逻澳。
    處理敏感數(shù)據(jù):考慮數(shù)據(jù)庫中敏感信息的存儲和訪問
  • 口令:存儲每個用戶的口令的salted單向哈希而不是口令本身闸天,將salt(一種附加的少量隨機(jī)數(shù)數(shù)據(jù))與哈希口令分開保存斜做;登錄時不用比較用戶口令和數(shù)據(jù)庫保存的口令苞氮,而是通過用戶提供的信息計算出salted哈希與數(shù)據(jù)庫中保存的哈希值進(jìn)行比較(如果用戶忘記了口令,則生成一個新的口令給用戶)瓤逼。
  • 信用卡及其他財務(wù)信息:使用認(rèn)可的(FIPS認(rèn)證過)加密算法來對信用卡等信息進(jìn)行加密笼吟,存儲加密后的明細(xì)數(shù)據(jù)。
  • 存檔:考慮每隔一段合理的時間就存檔或清除這些不需要的信息霸旗。
  • 避免明顯的對象名:為關(guān)鍵對象(加密函數(shù)贷帮、口令、信用卡列)選取名稱是需要格外小心诱告,eg:password
  • 創(chuàng)建數(shù)據(jù)庫honeypot:有人在嘗試從數(shù)據(jù)庫中讀取口令時接收警告撵枢,則可以創(chuàng)建一種帶password(包含假數(shù)據(jù))的附加honeypot(蜜罐),如果假數(shù)據(jù)被選中,那么發(fā)送郵件給應(yīng)用管理員锄禽。
  • 附加安全的開發(fā)資源:借助資源向開發(fā)人員提供工具潜必、資源、培訓(xùn)和知識沃但,提高安全性磁滚。
  1. 平臺層防御:
  1. 使用運(yùn)行時保護(hù)(成本):檢測、減輕或防止那些不需要重編譯易受攻擊的應(yīng)用的源碼宵晚,即可部署的SQL注入垂攘。
  • Web應(yīng)用防火墻:(WAF:網(wǎng)絡(luò)設(shè)備或?qū)踩约拥絎eb應(yīng)用中的一種解決方案)
  • 截斷過濾器:在請求資源的核心處理之前或之后執(zhí)行處理操作。
  • 不可編輯的輸入保護(hù)和可編輯的輸入保護(hù)
  • URL策略/頁面層策略
    頁面覆寫:創(chuàng)建一個在運(yùn)行時接受的替代頁面或類
    URL重寫:接收那些發(fā)送給易受攻擊頁面或URL請求坝疼,并將他們重定向該頁面的替代版本
  • 資源代理/封裝
  • 面向方面編程
  • 應(yīng)用入侵檢測系統(tǒng)
  • 數(shù)據(jù)庫防火墻
  1. 確保數(shù)據(jù)庫安全
  • 使用較低權(quán)限的數(shù)據(jù)庫登錄
  • 撤銷PUBLIC許可
  • 使用存儲過程
  • 使用強(qiáng)大的加密技術(shù)來保護(hù)存儲的敏感數(shù)據(jù)
  • 維護(hù)一個審查跟蹤
  1. 確保數(shù)據(jù)庫安全
  • 額外的系統(tǒng)對象鎖定
  • 約束即席查詢
  • 增強(qiáng)對驗證周邊的控制
  • 在最低權(quán)限的操作系統(tǒng)賬戶語境中運(yùn)行
  • 確保數(shù)據(jù)庫服務(wù)器打了補(bǔ)丁
  1. 額外的部署考慮
  • 最小化不必要信息泄露
  • 隱藏錯誤信息
  • 使用空的默認(rèn)Web站點(diǎn)
  • 為DNS反向查詢使用虛擬主機(jī)名稱
  • 使用通配符SSL證書
  • 限制通過搜索引擎hacking得到的發(fā)現(xiàn)
  1. 禁止WSDL信息
  • 提高Web服務(wù)器日志的冗余
  • 在獨(dú)立主機(jī)上部署Web服務(wù)器和數(shù)據(jù)庫服務(wù)器
  • 配置網(wǎng)絡(luò)訪問控制

防止LDAP注入

Function LDAPRequest(id)
    LDAPRequest = checkLDAP(Request(id))
end function

'防止LDAP的注入
Function checkLDAP(strHTML)
    If Isnull(strHTML) Then
        checkLDAP = ""
        Exit Function 
    End If
    
    strHTML=server.HTMLEncode(strHTML)
    
    Dim objRegExp,strOutput   
    Set objRegExp=New Regexp   
    objRegExp.IgnoreCase=true   
    objRegExp.Global=True  
 
    objRegExp.Pattern = Chr(0)
    strOutput = objRegExp.Replace(strHTML, "")
    objRegExp.Pattern = """"
    strOutput = objRegExp.Replace(strOutput, """)   
    objRegExp.Pattern = "\\"
    strOutput = objRegExp.Replace(strOutput, "\5c")
    objRegExp.Pattern = "NUL"
    strOutput = objRegExp.Replace(strOutput, "\0")
    objRegExp.Pattern = "/"
    strOutput = objRegExp.Replace(strOutput, "\2f") 
    objRegExp.Pattern = "\*"
    strOutput = objRegExp.Replace(strOutput, "\2a") 
    objRegExp.Pattern = "\("
    strOutput = objRegExp.Replace(strOutput, "\28") 
    objRegExp.Pattern = "\)"
    strOutput = objRegExp.Replace(strOutput, "\29") 
    Set objRegExp=Nothing
    
    checkLDAP = strOutput
end function 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搜贤,一起剝皮案震驚了整個濱河市谆沃,隨后出現(xiàn)的幾起案子钝凶,更是在濱河造成了極大的恐慌,老刑警劉巖唁影,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕陷,死亡現(xiàn)場離奇詭異,居然都是意外死亡据沈,警方通過查閱死者的電腦和手機(jī)哟沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锌介,“玉大人嗜诀,你說我怎么就攤上這事】谆觯” “怎么了隆敢?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崔慧。 經(jīng)常有香客問我拂蝎,道長,這世上最難降的妖魔是什么惶室? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任温自,我火速辦了婚禮,結(jié)果婚禮上皇钞,老公的妹妹穿的比我還像新娘悼泌。我一直安慰自己,他們只是感情好夹界,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布券躁。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪也拜。 梳的紋絲不亂的頭發(fā)上以舒,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音慢哈,去河邊找鬼蔓钟。 笑死,一個胖子當(dāng)著我的面吹牛卵贱,可吹牛的內(nèi)容都是我干的滥沫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼键俱,長吁一口氣:“原來是場噩夢啊……” “哼兰绣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起编振,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缀辩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踪央,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臀玄,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年畅蹂,在試婚紗的時候發(fā)現(xiàn)自己被綠了健无。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡液斜,死狀恐怖累贤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情少漆,我是刑警寧澤臼膏,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站检疫,受9級特大地震影響讶请,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屎媳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一夺溢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烛谊,春花似錦风响、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋怀。三九已至,卻和暖如春持搜,著一層夾襖步出監(jiān)牢的瞬間密似,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工葫盼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留残腌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓贫导,卻偏偏與公主長得像抛猫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孩灯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 隨著當(dāng)今世界網(wǎng)絡(luò)技術(shù)與信息技術(shù)高速發(fā)展闺金,Web應(yīng)用程序具有界面統(tǒng)一,使用簡單峰档,易于維護(hù)败匹,擴(kuò)展性好,共享度高等優(yōu)先面哥。...
    高美麗閱讀 3,970評論 0 4
  • Web安全簡史 在Web1.0時代香府,人們更多是關(guān)注服務(wù)器端動態(tài)腳本語言的安全問題鄙漏,比如將一個可執(zhí)行腳本(俗稱Web...
    潘良虎閱讀 3,931評論 3 72
  • 注入攻擊的分類 1.沒有正確過濾轉(zhuǎn)義字符 在用戶的輸入沒有為轉(zhuǎn)義字符過濾時政恍,就會發(fā)生這種形式的注入式攻擊笼才,它會被傳...
    查無此人asdasd閱讀 1,624評論 0 5
  • [SQL注入攻擊] SQL注入攻擊是黑客對數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一汉嗽。隨著B/S模式應(yīng)用開發(fā)的發(fā)展绩郎,使用這種模式...
    James黃杰閱讀 2,669評論 0 30
  • 姓名:于川皓 學(xué)號:16140210089 轉(zhuǎn)載自:https://baike.baidu.com/item/sq...
    道無涯_cc76閱讀 1,951評論 0 2