mysql — безопасность php, введите пароль к строке

Вопрос:
Это не безопасно ли вводить пароль в строку?
$ b = (строка) $ a;

Комментарий:
Я не хочу знать о более эффективных способах, я просто хочу безопасный способ. Просто для следующего варианта использования:

Шаг 1 — Зарегистрируйте пароль (PW):

  1. Получение PW при регистрации,
  2. Приведение его к строке
  3. Строка в хэш
  4. Сохранить хэш в MYSQL

Шаг 2 — Войти в систему, получить PW:

  1. Получение PW через форму
  2. Приведение его к строке
  3. Получение хэша из базы данных
  4. сравнивая оба

Я думаю, что это самый простой способ, но один из самых безопасных. Я хочу, чтобы КАЖДЫЙ персонаж для PW,

  • < / {} * #

и почему не азиатские символы.
Я подумал: этот метод не должен вызывать проблем с escape-проблемами, так как какой бы ни был код, он теперь является строкой и сравнивается только со строкой. Но я могу иметь любой характер без опасности.
База данных Mysql должна позволять каждому символу, когда установлено UTF8, верно?
Поэтому, пожалуйста, ответьте мне: эта идея простодушна?

заранее спасибо
Герд

1

Решение

Я не верю, что приведение пароля к строке в любом случае повлияет на общую безопасность вашего приложения. В этом смысле я думаю, что вопрос немного ошибочный.

В качестве примера того, почему приведение к строке на самом деле не помогает или не причиняет вам вреда, рассмотрим один из наиболее распространенных векторов атаки на базу данных: SQL-инъекция. Установите на веб-странице форму, которая принимает пользовательский ввод, отправляет ее в сценарий на стороне сервера, который создает запросы с этим пользовательским вводом, и вы внезапно становитесь уязвимыми. Поскольку все SQL-запросы являются строками, здесь не имеет большого значения, приведете ли вы к строке или нет.

Но что, если вы знаете, что вам нужна строка из формы (любой формы), и кто-то печатает целое число? Попробуйте это ..

Сделайте страницу с таким содержанием:

<!DOCTYPE html>
<html>
<head><title></title></head>
<body>
<form method="POST" action="/test.php">
<input type="text" name="testInput">
<input type="submit">
</form>
</body>
</html>

В test.phpпросто выкинь $_POST:

<?php
var_dump($_POST);

Затем введите целое число в поле формы и посмотрите, какой тип PHP выделяет для него. Это вывод, который я получаю:

array (size=1)
'testInput' => string '5.25' (length=4)

Поскольку на самом деле невозможно создать POST, содержащий объекты PHP (сам JSON является не чем иным, как строкой, пока он не будет декодирован), мы действительно беспокоимся только о собственных типах данных. Как вы можете видеть выше, даже не строковый ввод будет преобразован в строковые данные, когда PHP его получит.

Дело не столько в том, откуда поступают данные, будь то из формы или скрипта, а в том, как PHP получает их и делает их доступными для вас. Я могу создать ту же «форму» в виде скрипта, который выполняет запрос cURL и получает тот же результат.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector