2011-02-23 34 views
1

過濾來自用戶(POST和GET)的輸入以避免SQL注入和此類事情的行業標準是什麼。到目前爲止,我使用filter_input()和mysql_real_escape_string()函數?這是否足夠,如果不是,我應該使用其他什麼方法?如何在PHP中正確過濾來自用戶的輸入?

+0

似乎對我很好,只是別忘了驗證/消毒東西。我做的唯一不同的是使用PDO而不是mysql_ *。部分原因是,您不太可能讓某些事情因爲您在PDO強制清理過程中發生SQL查詢的值而出現漏洞。 – erisco 2011-02-23 05:45:34

+0

@erisco您能否詳細說明PDO以及您如何處理它? – miki725 2011-02-23 06:02:27

+0

我可能可以,但http://php.net/manual/en/pdostatement.execute.php已經有很好的例子了。 PDO非正式地成爲PHP中數據庫訪問的標準。 – erisco 2011-02-23 06:04:20

回答

3

生活的重要規則是FIEO。過濾輸入轉義輸出。

您從用戶處獲取並存儲的任何信息都必須經過服務器端過濾,爲此,您應該使用mysql_real_escape_string。在將值添加到數據庫之前,它總是應該是最後一件事。驗證用戶輸入,確保它是你想要的,如果你需要使用正則表達式,檢查它的長度和任何其他規則,刪除任何符號或標籤 - 完成所有這些,然後應用MySQL函數mysql_real_escape_string

您在網頁上顯示的任何動態信息 - 即來自用戶生成內容的數據庫或直接來自用戶輸入的信息都必須轉義。您必須對任何符號進行URL編碼,移除(或編碼)任何HTML標籤。

我強烈建議你通過專家克里斯·夏夫利特觀看網絡安全這個演示:

http://www.slideshare.net/shiflett/evolution-of-web-security

0

我建議你使用的數據庫LIB在這種方法將數據保存到像梨分貝CakePHP的ORM

數據庫你真的確定並指出可以攻擊你的分貝注射

3

逃逸避免SQL注入和篩選驗證輸入是兩個不同的東西。您不需要過濾輸入以避免SQL注入,並且過濾輸入不一定有助於防止SQL注入。

爲避免SQL注入,您將輸入轉義出來,以免混淆查詢的語法,或者使用準備好的語句完全避免該問題。這個輸入包含什麼並不重要,不管它是否被過濾。如果您使用適當的數據庫轉義函數或使用準備好的語句轉義一次,那麼您會擔心SQL注入。

您根據不同的原因過濾或驗證輸入,主要是因爲您不想允許數據庫中的某些值。這與將這些值放入數據庫(SQL注入可能發生的位置)的方式完全不同。

輸出你需要躲避值根據您的輸出介質,以及,出於同樣的原因,你在一個SQL查詢時,把他們逃脫他們:避免搞亂了語法,這可以被利用。即當輸出到網頁時,您的HTML將跳過您的值。再一次,它的價值無關緊要。如果它正確地逃脫了,它可以是任何東西。

0

您可以在php中使用PDO進行數據庫連接。 PDO代表PHP數據對象。它比mysql_connect更好。 PDO是面向Objetc的,同時它確保了更多的保護。

http://www.php.net/manual/en/class.pdo.php

$link = new PDO ($dsn, $user, $password, $options) ; 
0

使用htmlspecialchars來編碼可能導致問題的字符。驗證數據是不同的,這取決於您對輸入字段的期望。

相關問題