.Net中的RealProxy實現AOP

發表於2016-04-02

序言

這個AOP要從我們公司的一個事故說起,前段時間公司的系統突然在烏雲中出現,資料被洩露的一覽無餘,烏雲上顯示是SQL隱碼攻擊。呵,多麼貼近生活的一個露洞,可謂是人盡皆知啊。然而卻華麗麗的給拉我們一記耳光。

那麼問題既然來啦,我們.net組有40-50個專案之多吧,怎麼去一一補救這一過失呢?什麼又是SQL隱碼攻擊呢?再有就是常見的Web漏洞有哪些呢?我們怎麼更好的監控我們的系統呢?

那麼大家不要嫌我囉嗦,本篇我將對常見的網站攻擊與防禦,與.Net中AOP實現橫切關注點做一些介紹與演示。

常見的web攻擊與防禦

據資料統計:全球70%的web應用攻擊都是來自XSS攻擊和SQL隱碼攻擊。此外還有常見的跨站攻擊CSRF,Session劫持,檔案上傳等手段。

XSS攻擊

XSS攻擊即跨站點指令碼攻擊(Cross Site Script),看下全稱縮寫,本應該是CSS無奈,已被樣式表佔用,只能用個更牛逼的XXX代替,XSS,哈哈,蛋扯完啦,說下什麼是XSS,他是攻擊者在網頁中嵌入惡意程式指令碼,當使用者開啟網頁時,指令碼程式便開始執行,竊取客戶端cookie,使用者名稱,密碼,下載執行病毒木馬程式等等,牛逼的一塌糊塗,好像你的網站系統成啦他自己的一樣。

那麼怎麼注入的呢?舉個例子啊,假如發表個說說,或者微博,發表的內容是  “/>alert(‘123’);中,你再看下你的程式碼成什麼樣子啦,就會執行alert();我這裡僅僅是一個alert();黑客,就黑的不著邊際的黑你啊。

XSS防範:

1、將使用者輸入的特殊符號如:,”,””轉義為&lt,&gt,&amp,”等。

2、對Cookie新增HttpOnly屬性,他不能對抗XSS攻擊,但可以防止竊取cookie。

CSRF攻擊

CSRF攻擊即跨站請求攻擊(cross site request forgery)。攻擊者通過跨站請求,以合法使用者的身份進行非法操作,如轉賬,發表評語等。具體流程如下:

舉例說明:假設你在中國銀行網站進行轉賬業務,首先你登陸啦中國銀行,進行啦轉賬,這是假設你的轉賬連線為http:www.zhongguoyinhang/zz/1000.那麼你轉完帳後並沒有關閉頁面。而是訪問啦另外一個網站,另外一個網站的一個圖片或者連線為攻擊者布好的連線:http:www.zhongguoyinhang/zz/1000 。那麼很不幸,你又一次進行啦轉賬。

當然,中國銀行會有各種舉措。不過這確實是攻擊者的一種手段。

CSRF防範:

1、對Cookie新增HttpOnly屬性。

2、增加token驗證,驗證碼驗證,表單token等。

3、通過Referer識別,來源網站。

SQL隱碼攻擊

SQL隱碼攻擊相信每個開發者都耳熟能詳啦。不多說,就是通過sql拼接,讓你的sql執行別人想要執行的語句。甚至可惡的update,delete,等等等等!!

SQL隱碼攻擊防範:1、使用orm框架。2、使用預編譯語句。3、避免明文存放密碼。4、處理好響應的異常,因為異常中會包含關於伺服器版本,資料庫版本,程式語言甚至資料庫連線地址,使用者名稱密碼等資訊。

檔案上傳漏洞

檔案上傳也好理解:就是攻擊者上傳啦惡意可執行檔案或者指令碼,並通過指令碼獲取伺服器響應的權利,多可怕,如果他上傳個格式化你伺服器硬碟的程式,可想而知。怕不怕!!

防範:1、驗證字尾名。2、驗證魔數。魔數:很多型別的檔案,其實的幾個位元組內容是固定,因此根據這幾個位元組就能確認檔案的型別。這幾個位元組也稱為魔數。3、部署獨立的檔案伺服器。

其實攻擊手段還有很多,DDOS,CC,DNS域名劫持,cdn回源攻擊等等,大家可以在網上搜搜查查,瞭解一下。

AOP解決40-50個專案中的sql注入漏洞

這裡的aop其實是.Net中的透明代理與真是代理的實現。他讓一般開發者不用關心某個橫切點,比如介面效能的的記錄,日誌記錄,過濾危險字元,事物提交回滾等等。

首先我們的專案有的用的orm框架,有的沒有用,有的用的引數化拼接,有的直接字串拼接。那麼我們這麼多專案怎麼一下子進行清理盤查呢。我們想拉個辦法就是我們的專案都有業務邏輯層去連線資料讀寫層的。那麼我們只要把業務邏輯層這一層的方法引數給過濾一下危險字元,不就可以拉。那麼工程開始啦。

好啦,就這麼簡單,只要業務邏輯層的基類,整合ContextBoundObject新增我們的[SqlVerifyProxy]屬性就好啦,這個作為一個dll給其他專案引入,別人不用一個一個再寫一遍。不過這也是我們的權宜之計,相信我們以後的專案會有更好的架構設計,來防範諸如此類低階問題的發生。

RealProxy實現AOP業務層事務入侵

讓你的程式碼不用每次都宣告事物,你也不必擔心你的事物是否提交,或者回滾啦嗎?我做了一個示例僅供參考。

總結

AOP在.net中還有體現,比如mvc的過濾器。也有很多第三方的外掛供我們使用,比如:postsharp,castle.net等,大家可以瞭解學習下。如果你想把這裡的透明代理與真實代理學透徹,也推薦閱讀.Net本質論中的高階方法。同時也歡迎大家加入左上方群,我們一起探討學習。

相關文章