如果我使用md5加密MYSQL注入,它會執行嗎?如果我在執行「mysql_real_escape_string」之前加密MYSQL注入,它將能夠清空mysql注入?我應該在加密之前運行「mysql_real_escape_string」嗎?MYSQL注入和md5加密
回答
md5()
function返回一個包含ASCII字符0-9和a-f的字符串。 SQL注入需要使用像'
或"
這樣的字符,因此考慮到算法的預期效果,由md5()生成的散列字符串不會導致SQL注入EVER。
因此,你可以寫這樣的事情不用擔心:
$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);
mysql_query("SELECT * FROM users WHERE user='$username' AND pass='$password'");
但它是一個很好的做法,總是逃避,你傳遞給你的查詢與mysql_real_escape_string()數據。
請參閱我通常使用「sprintf()」,然後將mysql_real_escape_string作爲查詢的第二個參數。不知道我是否可以逃脫md5加密,但似乎我不需要擔心它,如果他們不能在編碼時惡意使用它 –
'良好實踐'是爲了逃避所有不可信的teztual數據。 MD5返回可以被信任。不加區別地轉義所有數據會導致兩個問題:1.轉義並不總是清理數據的方式(思考數字)2.不是常見的事情,但實際上您可能會遇到「雙重轉義」問題。 – Mchl
@Mchl:**所有**數據是不可信的,因爲它是由最不可信的實體 - 程序員處理的。這就是爲什麼逃避傳遞給SQL查詢的所有數據是一個好習慣。 – Dor
如果您使用MD5散列值,則不再包含任何惡意注入字符。 MySQL不會解碼MD5散列並將其解釋/執行爲SQL。實際上,MD5哈希不能被解碼,因爲它是單向算法。
或者它的設計,但它不像預期的那麼強大。 – bdares
MD5散列值是二進制數據,在PHP中用十六進制表示。這意味着,它們只包含數字0..9和字母A..F。 這封信不可能進行SQL注入,所以你很安全。
MD5散列值本身不能導致SQL注入,但如果您嘗試避免SQL注入,則您的方法是原因之一的非常好的方法之一。
你特殊情況下,一類變量不能導致注入(MD5'd密碼),那麼你特殊情況下的另一個(例如事情評估爲整數),那麼你忘記哪些應該逃脫,哪些不是,你最後得到一個應該逃脫的微小的微不足道的變量,但是沒有人從你的團隊發現它......糟糕的是,你的代碼中存在一個真正的漏洞。
您避免轉義一個安全類,避免轉義第二個安全類,然後您錯誤地認爲第三個類也是安全的 - 事實證明,MD5是二進制編碼,有人設法找到用它來創建注入的方法...糟糕...你的代碼中還有一個更真實的漏洞。
您應該:
1)始終使用參數化查詢。這使得逃避不必要,並避免忘記逃離某些東西的風險。使用mysqli
和bind_param
:
$stmt = $db->prepare('insert into users (username, password) values (?, ?)');
$stmt->bind_param('ss', $name, md5($password));
$stmt->execute();
2)如果由於某種原因,你不能,什麼都逃不過。即使沒有必要。你不想忘記一些東西。
打擊SQL注入的規則是:不要試圖去了解什麼是安全的,什麼不是安全的,假設一切都是不安全的,並且把所有事情都視爲不安全。如果您將安全值視爲不安全,那麼程序仍然會正常運行,如果您將不安全的值視爲安全的,則您的程序將包含巨大的安全漏洞,並且一個錯誤就足夠了。
儘管通常md5哈希值不能用於注入攻擊,但值得指出的是raw md5哈希值可被利用。原始md5散列是使用 md5($userSubmittedValue, true)
生成的散列 - 它們很脆弱,因爲輸出是一個可以包含非十六進制輸出的字符串。雖然在原始形式中生成散列並不常見,但重要的是要注意,技術上散列值可以在注入攻擊中被利用。
下面是它如何工作的一個示例:
http://cvk.posterous.com/sql-injection-with-raw-md5-hashes
至於其他人士指出,雖然十六進制MD5輸出不容易受到注入攻擊。
- 1. 加密和解密MySQL中的MD5
- 2. 加密和解密md5
- 3. MD5加密與密鑰
- 4. 在md5中加密密碼?
- 5. 鹽+ SHA512 + MD5加密
- 6. md5加密和解密java無法加密超過16bytes
- 7. php md5加密帖子名稱和值?
- 8. MD4和MD5加密之間的區別
- 9. 如何在MySQL中生成MD5加密密碼?
- 10. MySQL:將未加密的密碼列轉換爲MD5哈希
- 11. 使用md5.js和PHP解密的客戶端密碼加密
- 12. asp.net中的md5加密
- 13. 加密表單數據MD5
- 14. 春季安全加密MD5
- 15. 故障使用MD5加密
- 16. MD5加密表中的所有密碼
- 17. 更新和md5密碼
- 18. MySQL的MD5和Java MD5不等於
- 19. MD5密碼解密
- 20. Sha或Md5算法我需要在flex中加密和解密
- 21. 在Java中使用MD5和Salt進行密碼加密
- 22. MYSQL如何檢查MD5密碼
- 23. MySQL從md5密碼中截取字符
- 24. 解密MD5 iphone
- 25. 將md5加密的密碼轉換爲解密的密碼wordpress
- 26. 如何在Coldfusion的mysql數據庫中使用md5加密密碼字段
- 27. PHP MD5與MySQL的md5
- 28. 將輸入(密碼)轉換爲MD5
- 29. PHP的mysql_real_escape_string和MySQL注入
- 30. 避免MySQL注入和XSS
加密注射是什麼意思?你有一個例子嗎? – Vache
可能應該提及您正在明確地查看PHP解決方案,作爲標籤或問題主體本身。 – bdares