2013-08-04 24 views
0

我還沒有santized用戶輸入和數據來自url等我所做的是我編碼數據庫中的每一件事情,作爲base64甚至表主鍵的ID ..是足以對抗漏洞?是否足以將所有字段以mysql的身份保存在mysql中?

+8

它的工作原理與大錘用於掛在牆上的照片一樣。 –

+0

好吧,如果你做得對,是的,但是是超級殺傷力。 –

+4

否。請考慮包含HTML標記的用戶輸入。你的數據庫可能是安全的(-ish),但你的頁面會中斷。 – 2013-08-04 06:05:53

回答

4

不,不是。

所有你將要做的事情(除了浪費的CPU和數據庫中的空間外)就是存儲不安全的數據。如果做得正確,你已經保護自己免受SQL注入。但就是這些。只要你解碼數據,你就回來了所有未經處理的數據的問題。

所以,除非你打算不要用你存儲的東西做任何事情,否則你是不安全的。

+0

,但我會neve解碼數據,同時插入到數據庫中?我只會解碼它,如果我想在頁面上顯示數據?那麼它怎麼會是不安全的?無論是注射還是其他任何東西,但它將是無用的? – user2635066

+1

閱讀關於XSS的例子(https://en.wikipedia.org/wiki/Cross-site_scripting)。你的編碼不​​會做任何反對的事情 - 你會在沒有任何形式的安全措施的情況下將漏洞利用回客戶端。 – Mat

2

您正在防範的漏洞是什麼?正如Mat所說的那樣,你將不受SQL注入的影響,但那將是全部。

另外,值得注意的是base_64編碼除了刪除SQL注入之外沒有任何安全性值,並且任何查看者都很清楚您的數據是base_64編碼的,因此很容易破解。

我建議你在繼續之前閱讀OWASP的工作。其中一些有點幹,但對於任何Web開發人員來說,大多數是有價值的預讀。如果你只是確保自己獲得了前10名,那將是一個開始。

給點閱讀指導:

請仔細考慮一下你的數據。任何敏感的東西都應受到保護。真正的偏執狂可能會考慮AES加密,但坦率地說,除非你存儲健康,財務或軍事數據,這可能是矯枉過正。保持你的關鍵祕密 - 任何可以下載你的數據庫的人都可以下載你的密鑰。有方法可以防止這個順便說一句,但你的問題表明你還沒有達到那個水平。 儘可能不要加密密鑰,因爲它會阻止建立索引,並且不加密數據。但是請確保未加密的數據不能用於得出有關加密數據的重要結論。

請將密碼存儲爲鹽漬散列。至少如果您的數據庫受到攻擊,黑客將無法攻擊用戶的其他帳戶(他們將使用相同的密碼...)

請勿使用電子郵件地址作爲用戶名和密碼重置。它不是/或

不要DIY安全解決方案。畢竟AES對於CIA來說已經足夠好了。

在HTML中混淆你的密鑰 - 網上有很多簡單的混淆器。

請檢查每個訪問您的數據庫ESPECIALLY AJAX腳本的每個頁面的已驗證會話。

不要依靠客戶端認證 - 只能停止愚蠢。惡意的人可以很容易地繞過它。

FINALLY-

DO用於所有用戶輸入準備語句。

不好意思,但這些問題每天都以某種形式出現在這個論壇上,值得重複一遍。

一旦你做了/沒有做上述清單上的任何事情,你將會對最嚴重的問題有所瞭解,但仍然遠離安全。我故意沒有完全解釋任何方法,因爲您將通過使用Google搜索和閱讀一些內容來了解​​有關應用程序安全性的大量信息。

玩得開心...

編輯回答下面的評論。

使用base_64編碼作爲擊敗SQL注入的手段沒有任何內在的錯誤。它是完全可靠的,因爲base_64編碼不包括任何可能使sql生氣的字符。

有幾個原因,但是不要:

- 它是非常密集的數據,採取更多的空間來存儲數據。 - 它使搜索數據非常低效。 - 它使你很難讀取你的數據,但對攻擊者來說並不困難。 - 它沒有提供有效的密碼保護(請使用鹽漬散列)。

echo base64_encode("Abcde")."<BR>".base64_encode("cd"); 

有效地演示了搜索和大小的問題 - 你不能沒有額外的指令有效地使用LIKE或通配符 - WHERE如果你有from_base64(場)LIKE「%CD%」將工作的MySQL 5.6.1或以上。

如果它適合您的特殊需要,就這樣做,那麼很好,但我把它給你,你沒有學會正確做到這一點。如果您使用準備好的語句,您可以高效,可轉位,可擴展,可搜索,安全,人性化和易於調試地存儲數據。
你正在做的事情對於一個非常小的網站來說足夠好,但對於任何更大的網站來說都不會。

+0

如果有人想破解我的數據比它好.. cz的數據並不重要,數據是供用戶閱讀..但問題是他們將永遠無法通過插入sql注入破解數據庫是真的?如果是這樣,爲什麼不推薦base64,而不是用其他方式清理數據? – user2635066

相關問題