$ezSQL->escape()


0 Comments

ezSQL 是一個非常容易使用的 Database Abstraction Layer , WordPress 的 wpdb 也是用這個改寫而成。最近寫了一個教學用的留言板程式,因為程式本身太簡單,於是順便學習怎麼處理 SQL Injection,才發現它的 escape 是有點問題的,我改寫成下面這樣:

function escape($str) {
    if (!get_magic_quotes_gpc()) {
        return mysql_real_escape_string($str);
        //return addcslashes(mysql_real_escape_string($str), "%_"); //當有LIKE-SEARCH時用這個
    } else {
        return $str;
    }
}

原本的 escape 在沒有開啟 magic quotes 的情況下,將會移除所有的反斜線。

關於上面提到的簡單留言板,如果還有什麼安全漏洞,我還滿想知道的,發現的話請告訴我 XD 原始碼可以在此取得。我本來是想說以 Public Domain 釋出,還可以讓人拿去交作業,不過沒辦法,我用了一個 GPL 、和一個 LGPL 的 Library ,所以就只能以 GPL 釋出了 XD

Update:目前已經知道有 XSS 漏洞,不過懶得修 :p 已知的兩個修掉了,不過我不能肯定還有沒有就是了…

剛才看到 Jeremy Zawodny 的 Database Abstraction Layers Must Die!,他嚴厲的反對 Database Abstraction Layer 和 Template Engine ,我是覺得沒這麼嚴重… 轉移資料庫的痛苦的確大多是在架構環境及轉移資料(當資料龐大時)而不是改寫程式,不過有沒有使用 DAL 都會有這些痛苦,那麼還不如讓寫程式輕鬆一點,我向來都老實承認我用 Database Abstraction Layer 是因為懶惰 XD 至於執行效率方面… 那不是人類能感覺得到的差異… 這麼計較的話,何不連 Compiler 都捨棄?

Leave a Reply

Your comment may not display immediately due to spam filtering. Please wait for moderation.