前幾天無意間聽到有人提到 iBatis 使用了 PreparedStatement 的機制,所以沒有 SQL Injection 的問題,因此我特地寫了這篇文章來說明 iBatis 與 SQL Injection 的關係。在開始說明之前,我稍微解釋一下 iBatis 這個套件。根據作者的解釋,它是一個 SQL Mapping 的工具,抽象程度高於 JDBC,但是卻低於 ORM (例如 Hibernate)。簡單來說,iBatis 將系統中會使用到的 SQL 指令皆放置在 XML 檔案內,以避免利用程式本身產生與維護 SQL 指令時的困擾。相較於 JDBC,iBatis 也提供了像是 Cache、Transaction Management 等高階的功能,幫助系統開發者簡化資料庫的相關操作。而因為某些原因,iBatis 已經改名為 MyBatis,不過基本上兩者是一樣的。反倒是目前 MyBatis 有 2.x 與 3.x 兩個主要版本,兩者之間卻是不相容的。
回到 SQL Injection 本身,用了 iBatis/MyBatis 就沒有 SQL Injection 的問題了嗎?聰明的讀者,您一定想到了答案。因為如果答案是肯定的,就沒有這篇文章存在的必要性, 所以答案就是即使使用了 iBatis/MyBatis,並不能保證系統就沒有 SQL Injection 的問題。基本上,iBatis/MyBatis 雖然會以 PreparedStatement 的方式執行 SQL 指令,但是就像我在之前文章內的說法一樣,光使用 PreparedStatement 並無法完全杜絕 SQL Injection 的攻擊。主要的問題發生於在當使用 inline 方式宣告 SQL 指令的參數時,iBatis/MyBatis 允許兩種參數傳遞的宣告方式,一種是利用 #,另外一種則是透過 $,而後者正是問題所在。$ 表示將參數的內容直接附加於 SQL 指令之內,而不是使用參數化的設定。因此只要使用了 $ 的方式來傳遞參數,就有可能遭受 SQL Injection 的攻擊。
cyrilwang 發表在 痞客邦 留言(0) 人氣()
DoS/DDoS (阻斷服務攻擊) 對許多人來說,早已經是耳熟能詳的名詞。以 DoS 的定義來說,只要能夠讓服務中斷,不管用什麼方法都可以算是 DoS 的攻擊。所以,拿榔頭把連結伺服器的路由器給敲爛,絕對也是 DoS 攻擊的一種。這樣的攻擊方式除了被逮捕的風險高了許多,而且在效率上也不夠好。所以除非你跟某家企業有深仇大恨,而且報著必死的決心,不然請勿輕易嘗試此一作法。也因此以網路為主的遠端 DoS/DDoS 才是主要的攻擊手法,駭客想盡一切辦法讓使用者無法連結到某個企業的網路服務,像是把網路頻寬或伺服器的運算資源消耗殆盡。
而這一兩年極為熱門的話題 - SaaS (或大家比較常聽到的雲端運算),除了它本身產生的資安考量外,SaaS 與 DoS/DDoS 還有其他的關聯。首先,SaaS 的架構讓駭客擁有了更多且更便宜 (甚至免費) 的資源來對攻擊目標的資源進行消耗的行為。嚴格來說,甚至可以說是以 Botnet 為主的地下經濟本身就是一種 SaaS 的服務,只是買方甚至連軟體都不用操作就可以收到結果。另外之前提到利用 SaaS 架構提供破解 WPA 的服務,雖然不是用來進行 DoS/DDoS 的攻擊,卻也是利用 SaaS 來增強破壞力的應用。
cyrilwang 發表在 痞客邦 留言(0) 人氣()
雖然大多數的人跟我一樣,都不是密碼學的專家,但是密碼學的應用卻充斥在我們的日常生活之中。從你買東西時使用信用卡付賬,到在網路上進行購物,甚至是你每天登入到作業系統,都跟密碼學有關。密碼學的中文說法,其實很容易讓人產生誤解,因為密碼學講的並不是我們平常登入各式系統所使用的密碼,而是加解密的演算法。雖然比較嚴謹的系統都會將密碼做加密的保護,但是兩者之間卻沒有必然的關係,而密碼學就是一門充滿了各式各樣演算法的學問。這些複雜的演算法,往往都不是由資訊專家所提出,而是數學家所苦心研究出來地成果,並經過外界公開的審視。儘管演算法在被公開接受並採用前往往已經經過了仔細的評估,但是卻沒有一個演算法本身是絕對安全的。所有的演算法至少都會遭遇一種手法的攻擊,那就是所謂的暴力攻擊法。簡單的說,暴力攻擊法就是利用強大的運算能力,將加密或解密的各種可能性逐一計算,最後獲得所需資訊的手法。既然所有的演算法都會遭受暴力攻擊法的攻擊,那麼為什麼密碼學的應用還會被大量採用在我們日常生活當中呢?原因很簡單,就是因為暴力破解法所需的強大運算往往在現今的技術下是無法有效地加以實現,也因此我們的資料”暫時”是安全的。
除非是很特殊的組織或個人,否則一般駭客能夠用來破解加密資料的工具還是最常見的個人電腦設備。傳統上我們常用的電腦設備主要透過中央處理器 (CPU) 處理各式各樣的運算需求,而中央處理器本身是一個通用的處理器,所以對於處理大量的數學運算並不在行。儘管隨著技術的進步,中央處理器的處理速度已經大為提昇,但是先天的定位註定中央處理器一旦遇到複雜的數學運算就是只能吃憋。
cyrilwang 發表在 痞客邦 留言(0) 人氣()