2011-04-10 48 views
3

我會如何將潛在的SQL注入攻擊存儲在數據庫中?如何安全地將可疑SQL注入攻擊存儲在數據庫中?

首先假設我已經檢測到潛在的攻擊,並且在變量中包含有問題的攻擊字符串,並且希望將其添加到包含可疑事件日誌的表中。

我需要做些什麼來安全地將這些字符串插入到數據庫中,以避免產生錯誤?

我有一種感覺,這將是沿着htmlspecialchars和mysql_real_escape_string的行...但我想把它扔出去,看看有沒有人有任何想法!

唯一的想法是存儲作爲攻擊的base64編碼值,但似乎有點hackish ...

僅供參考,我寫在PHP :)

任何響應將是極大的應用不勝感激!

+1

如果您在數據庫中存儲攻擊,那麼base64有什麼問題?這不是「駭人聽聞」,它可以安全地存儲。 – Cyclone 2011-04-10 17:21:12

+0

嚴格來說,從個人的角度來看,我會將它保存在服務器上的文件中(引用數據庫中的文件)。我至少每天瀏覽一次ftp,這樣可以很容易地檢查一兩個文件。 – Khez 2011-04-10 17:25:20

回答

4

始終使用參數化查詢。如果您使用參數,則不需要依賴轉義字符串,並且查詢將始終按照您的意圖進行。

例如爲:

$statement = $db->prepare('INSERT INTO table_name (field_name1, field_name2) VALUES (:value, :value2)'); 
$statement->execute(array(':value' => $value, ':value2' => $value2)); 

爲PDO查看文檔準備在這裏:

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

2

使用mysqli準備好的語句來存儲查詢,這是避免sql注入的最安全的方法。如果您要通過Web界面顯示它們並關注XSS/CSRF攻擊,請在顯示它們之前使用htmlspecialchars()

-1

我只想通過簡單的加密來運行它。 然後,當你想顯示可疑的SQL,你只需解密它。 這應該確保可疑的sql語句不會在您的數據庫中執行。

+0

加密過度,正確地轉義字符串或使用預處理語句就足夠了。 – Eelke 2011-04-10 17:26:44

+0

例外知道所用加密的攻擊者可能會構造一個聲明,其* * *表格執行SQL注入。這實際上是解決問題的錯誤方法。 – 2011-04-10 17:28:01

+0

我沒有說這是做這件事的最好方式,也可能是最安全的方式,但你也可以說轉義字符串也是一種加密形式,你正在採取原始方式,改變它並保存結果。 – Jethro 2011-04-13 14:13:30

0

以同樣的方式你存儲的任何其他數據。
無論你怎麼稱呼它,存儲SQL注入攻擊都沒有什麼特別之處。

0

像史蒂夫梅恩說...請使用PHP PDO連接與準備好的語句。這是現在的保險箱。不要再使用mysql_connect()和子函數,因爲它已經老了,而且你不能充分受益於新的mysql/sql /等等。funcitons。