我還沒有santized用戶輸入和數據來自url等我所做的是我編碼數據庫中的每一件事情,作爲base64甚至表主鍵的ID ..是足以對抗漏洞?是否足以將所有字段以mysql的身份保存在mysql中?
回答
不,不是。
所有你將要做的事情(除了浪費的CPU和數據庫中的空間外)就是存儲不安全的數據。如果做得正確,你已經保護自己免受SQL注入。但就是這些。只要你解碼數據,你就回來了所有未經處理的數據的問題。
所以,除非你打算不要用你存儲的東西做任何事情,否則你是不安全的。
,但我會neve解碼數據,同時插入到數據庫中?我只會解碼它,如果我想在頁面上顯示數據?那麼它怎麼會是不安全的?無論是注射還是其他任何東西,但它將是無用的? – user2635066
閱讀關於XSS的例子(https://en.wikipedia.org/wiki/Cross-site_scripting)。你的編碼不會做任何反對的事情 - 你會在沒有任何形式的安全措施的情況下將漏洞利用回客戶端。 – Mat
您正在防範的漏洞是什麼?正如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或以上。
如果它適合您的特殊需要,就這樣做,那麼很好,但我把它給你,你沒有學會正確做到這一點。如果您使用準備好的語句,您可以高效,可轉位,可擴展,可搜索,安全,人性化和易於調試地存儲數據。
你正在做的事情對於一個非常小的網站來說足夠好,但對於任何更大的網站來說都不會。
如果有人想破解我的數據比它好.. cz的數據並不重要,數據是供用戶閱讀..但問題是他們將永遠無法通過插入sql注入破解數據庫是真的?如果是這樣,爲什麼不推薦base64,而不是用其他方式清理數據? – user2635066
- 1. 檢查以確保字段中的所有值都是MySQL中的整數
- 2. 是否可以在php中的會話中保存mysql對象?
- 3. 在MySQL中以特定用戶身份進行身份驗證
- 4. 是否可以「在TeTeCity中以guest身份下載所有(.zip)」工件?
- 5. MySQL - 是否可以在表中的所有列上使用LIKE?
- 6. 以root身份保存所有權移動文件linux
- 7. 如何在mysql中刪除列字段是否有2個以上的字?
- 8. 是否可以在WHERE子句中使用MySQL字段值?
- 9. 是否可以將jtable保存在mysql數據庫的單個列中?
- 10. 是否可以保存一個沒有字段的Drupal視圖?
- 11. 是否可以在CakePHP中檢測MySQL字段的字段類型?
- 12. 將文本字段中的新行保存到mysql字段
- 13. 將圖像保存到MYSQL Blob字段
- 14. 可以索引這個mysql查詢中的所有字段嗎?
- 15. 如何在MySQL中顯示所有月份(不管月數是否在MySQL中)
- 16. 是否可以將SharePoint用戶存儲在MySql數據庫中?
- 17. 以MySQL的備份
- 18. 是否可以在OpenGL中一次保存所有狀態?
- 19. mysql concat所有字段表
- 20. 是否可以檢查mysql行中的任何字段是否爲空?
- 21. 選擇除MySQL兩個字段以外的所有行
- 22. 是否可以將文檔字段存儲在SearchKit索引中?
- 23. MySQL-可以在一段時間內備份mySQL數據庫嗎?
- 24. MySQL中是否存在可能未存儲在字段中的非法字符?
- 25. 替換MySQL中的所有字段
- 26. 是否可以選擇視圖中的所有文本字段?
- 27. 是否可以在MySQL中使用Subtable?
- 28. Rails將所有字段保存爲零
- 29. NHibernate的mysql身份
- 30. 檢查MySQL表是否存在以及是否創建它們
它的工作原理與大錘用於掛在牆上的照片一樣。 –
好吧,如果你做得對,是的,但是是超級殺傷力。 –
否。請考慮包含HTML標記的用戶輸入。你的數據庫可能是安全的(-ish),但你的頁面會中斷。 – 2013-08-04 06:05:53