PHP與SQL注入攻擊[三]

來源:互聯網
上載者:User

這幾天太忙,繼續連載哈哈,爭取半個月結束。

上文說到資料庫內建的不安全輸入過濾功能,但這樣的功能不是所有資料庫都有的。目前大概只有MySQL,SQLite,PostgreSQL,Sybase帶有這樣的功能,而包括Oracle和SQL Server在內的很多資料庫都沒有。

鑒於這樣的情況,一般開發人員採用一種通用的方法來避免不安全的資料寫入資料庫--base64編碼。這樣可以避免所有可能引起問題的特殊字元造成的危險。但Base64編碼後的資料容量大概會增加33%,比較佔用空間。在PostgreSQL中,使用Base64編碼資料還有個問題,就是無法使用'LIKE'查詢。

所以總結這麼多,我們知道光靠資料庫自身的字串屏蔽也是不行的。我們需要一種解決方案,在特殊字元影響到我們的Query語句之前,就把危險的字元過濾掉。預定義查詢(Prepared queries/prepared statements)是一個非常好的方法。什麼是預定義查詢呢? 它就相當於一個查詢語句的模板,定義了查詢語句的結構和某些部份的資料類型。如果我們提交的SQL語句符合這個模板的定義,就執行,否則就不執行,報出錯誤。

例如:

pg_query($conn, “PREPARE stmt_name (text) AS SELECT * FROM users WHERE name=$1”);
pg_query($conn, “EXECUTE stmt_name ({$name})”);
pg_query($conn, “DEALLOCATE stmt_name”);

PREPARE stmt_name (text) AS ..定義了一個查詢的格式,這裡除了$1之外的所有字元都是預留位置,不允許更改。呵呵,我覺得這種方法實在是個好方法。不過可惜不是所有資料庫都支援。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.