Если я зашифрую MYSQL-инъекцию с помощью md5, он все равно будет выполняться? Если я зашифрую MYSQL-инъекцию до того, как я сделаю «mysql_real_escape_string», он сможет обнулить инъекцию mysql? Должен ли я запускать «mysql_real_escape_string» перед тем, как зашифровать?MYSQL Injection и md5 encryption
ответ
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, но, похоже, мне не нужно беспокоиться об этом, если они не могут использовать его злонамеренно, когда он закодирован. –
«Хорошая практика» заключается в том, чтобы избежать всех непроверенных данных. Возврату MD5 можно доверять. Избегание всех данных без дискриминации приводит к двум проблемам: 1. экранирование - это не всегда способ дезинфекции данных (мыслить числа) 2. Не обычная вещь, но вы можете столкнуться с проблемой «двойного выхода». – Mchl
@Mchl: ** Все ** данные ненадежны, потому что они обрабатываются самой ненадежной сущностью - программистом. Вот почему это хорошая практика, чтобы избежать всех данных, которые вы передаете в ваш SQL-запрос. – Dor
Если вы hashed значение с 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. Does md5 stop SQL Injection
- 2. MySQL Column for Encryption
- 3. MySQL, MD5 и MD5 Java не равно
- 4. Mysql Encryption Key
- 5. РНР mysql_real_escape_string и MySQL Injection
- 6. MySQL использует openSSL/Enterprise Encryption
- 7. PHP MySQL Password Password Encryption
- 8. MySQL Injection происходит неправильно
- 9. PHP Two Way Encryption
- 10. MySQL INJECTION Solution
- 11. mysql is_numeric sql injection
- 12. MD5 хэш MySQL является md5 неправильный
- 13. mysql injection error 1064
- 14. PHP MySQL Injection
- 15. MySQL Entity Injection
- 16. JQuery безопасность относительно mysql injection
- 17. MySQL MD5 SELECT
- 18. md5 результата MySQL
- 19. php encryption sql
- 20. Как сгенерировать md5 с php и mysql
- 21. Шифрование и дешифрование MD5 в MySQL
- 22. MySQL таблицы отношений и использование md5 хэш
- 23. Создать логин с PHP, MySQL и MD5
- 24. md5 hash логин с php и mysql
- 25. Python и PGP/encryption
- 26. mysql injection получить один ряд
- 27. ViewState Encryption в ASP.Net
- 28. MySQL CBC Encryption and Storing Инициализация вектора
- 29. MySQL Injection от LIKE оператора
- 30. Являются ли Android «Full Disc Encryption» и «Storage Encryption» одинаковыми?
Что вы подразумеваете под шифрованием инъекции? У вас есть пример? – Vache
Следует, вероятно, упомянуть, что вы явно рассматриваете PHP-решение, как тег или сам вопрос. – bdares