2016-07-06 70 views
0

是否有任何自動SQL注入預防PHP庫。例如,檢查傳入的參數,如GET,POST,並在繼續執行站點代碼之前檢查可能的SQL攻擊特徵碼。自動SQL注入預防PHP庫

例如像: http://www.example.com/index.php?page_id=「)/ /聯盟//ALL//選擇//NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL -/**/uHkS

在上面的URL中,我已經在GET參數中傳遞了SQL語法,PHP庫會在項目代碼開始執行之前檢查GET,POST參數,如果有任何SQL攻擊包含,將立即存在請求。拋出異常消息。

+2

您可以使用預處理語句防止SQL注入 – Jens

+0

閱讀[PDO](http://php.net/manual/en/book.pdo.php)和[Prepared statements](http://php.net) /manual/en/pdo.prepared-statements.php) –

+0

強烈建議存儲過程對SQL注入。 – rhazen

回答

0

正如其他評論中所寫:沒有庫可以通過請求自動檢測數據庫的攻擊。

如果有數據傳入可能對數據庫操作造成威脅,立即取消請求將會非常糟糕。

只需輸入正常形式的用法名稱即可。他的名字是Brian O'Connor ......好吧,他似乎無法使用你的程序。

如果用戶想搞亂數據庫,庫需要進行語義檢查。爲了進行這種語義檢查,圖書館還需要知道實際預期的數據類型。在上面提到的例子中,當期待一個名字時,你可能確定「drop table」不是想要的輸入,但是爲每個輸入定義所需要的規則會花費很多開銷。

如果你總是正確對待用戶數據(通過使用準備好的語句或你的數據庫API的轉義/引用函數),你的表中會有一些奇怪的數據(如果有人真的試圖注入你的sql)這不會傷害你我猜。

-2

有很多事情你可以對數據庫做到底使用PDOPrepared Statements,或者你可以消毒在服務器端腳本結束POSTGET數據。

$safe_data=filter_input(INPUT_GET, 'comment', FILTER_SANITIZE_SPECIAL_CHARS); 

因爲這個函數一次只能工作在單一GET參數,你可能想編寫一個函數來創建一個新陣列(例如$SAFE_GET),它遍歷了GET參數,並進行消毒他們都一氣呵成。

或者,你可以在php.ini文件中設置一個指令,默認爲消毒HTML安全所有輸入:

filter.default="special_chars" 

我不認爲有可以消毒是PHP庫;你必須小心處理你的數據。

對於POSTGET,請清理用戶輸入。對於所有類型的Fuzz Testing和執行Q & A,您的應用程序應該是安全的。

+0

* HTML * -escape與SQL *注入有關嗎? –

+0

是否永遠?如果惡意使用表單怎麼辦? – unixmiah

+0

如果惡意使用無形式會怎麼樣? –