PHP與SQL注入 三

2021-08-22 01:48:00 字數 822 閱讀 3699

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

上文說到資料庫自帶的不安全輸入過濾功能,但這樣的功能不是所有資料庫都有的。目前大概只有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 ()」);

pg_query($conn, 「deallocate stmt_name」);

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

PHP與SQL注入

sql注入攻擊是黑客攻擊 最常用的手段。如果你的站點沒有使用嚴格的使用者輸入檢驗,那麼常容易遭到sql注入攻擊。sql注入攻擊通常通過給站點資料庫提交不良的資料或查詢語句來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。下面來談談sql注入攻擊是如何實現的,又如何防範。看這個例子 suppose...

PHP與SQL注入

sql注入攻擊是黑客攻擊 最常用的手段。如果你的站點沒有使用嚴格的使用者輸入檢驗,那麼常容易遭到sql注入攻擊。sql注入攻擊通常通過給站點資料庫提交不良的資料或查詢語句來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。下面來談談sql注入攻擊是如何實現的,又如何防範。看這個例子 suppose...

PHP與SQL注入

sql注入攻擊是黑客攻擊 最常用的手段。如果你的站點沒有使用嚴格的使用者輸入檢驗,那麼常容易遭到sql注入攻擊。sql注入攻擊通常通過給站點資料庫提交不良的資料或查詢語句來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。下面來談談sql注入攻擊是如何實現的,又如何防範。看這個例子 suppose...