Я создаю веб-сайт, который кодирует данные пользователя (например, имя пользователя, адрес электронной почты, номер телефона …), чтобы их данные были в безопасности.
Чтобы предотвратить попадание данных в открытый доступ, я кодирую их с помощью SHA1 перед сохранением в базе данных. Я обрабатываю запросы, используя PHP.
Когда форма отправлена и данные отправлены, могут ли данные быть утечены или перехвачены? АНБ или злоумышленник, например.
Если это так, я думаю о кодировании данных с использованием JavaScript прямо перед отправкой формы. Будет ли это работать?
Я знаю, что не должен отвечать на это, поскольку это не по теме, но есть вещи, которые необходимо прояснить здесь:
В первом абзаце вы сказали Я кодирую введенные данные, Я не знаю, что вы имеете в виду именно под этим.
Если вы имеете в виду шифрование, я не уверен, как вы шифруете электронную почту / имя пользователя, если вы используете их для аутентификации.
Но, вообще говоря, шифрование данных — это хорошо, если вы используете хороший шифр с надежный надежный ключ, проверять Где хранить ключ шифрования на стороне сервера?.
Вы также сказали используя sha1 перед сохранением в базе данных. Это также неясно, вы хэшируете все данные с помощью sha1? если так. как вы «распаковываете» данные, когда вам это нужно.
Я предполагаю, что вы хэшируете пароли, но sha1 и md5 (два распространенных алгоритма) не подходят для паролей (или, как сказал @Peter: непригоден для чего-либо, связанного с безопасностью).
Чтобы хэшировать пароли, вы должны использовать правильные алгоритмы для этого, такие как bcrypt, scrypt или argon.
В PHP лучший способ хэшировать пароль — использовать встроенные встроенные функции. password_hash()
для перемешивания и password_verify()
для проверки хеша.
Эти функции доступны в PHP 5.5 или новее, если вы используете более старую версию — рассмотрите возможность обновления — вы можете использовать это библиотека совместимости по ircmaxell.
Во втором абзаце вы говорили о данных, представленных в форме «утечки», я полагаю, вы имеете в виду перехваченную a.k.a. Атаку «человек посередине» — сокращенно MITM.
Чтобы защитить данные от MITM-атак, вам нужно использовать HTTPS вместо небезопасного HTTP.
HTTPS шифрует данные, передаваемые между вашим сервером и клиентом (браузером / пользователем), что предотвращает перехват данных любым лицом.
Обычно, чтобы получить HTTPS, вы должны заплатить, но теперь есть бесплатный центр сертификации -CA для коротких звонков. Давайте зашифруем который предоставляет бесплатные сертификаты.
Вы говорили о шифровании данных с помощью JavaScript перед отправкой формы.
Это не сработает просто потому, что, когда клиент подключается к вашему обычному веб-сайту HTTP, HTML / JavaScript находится в виде обычного текста и может быть изменен, злоумышленник может просто перехватить ваш код JavaScript (тот, который будет шифровать данные) и измените его на все, что он хочет.
Единственное решение, которое вы должны рассмотреть, это получить сертификат SSL для вашего сайта.
Я предполагаю, что вы говорите о наблюдении, проведенном агентством, здесь есть две вещи:
MITM-атака, о которой я уже рассказывал выше, использует HTTPS.
Доступ к данным на вашем сервере. Если АНБ каким-то образом заинтересовано в ваших данных, и ваш сервер находится в месте, где они находятся под юрисдикцией, они могут просто получить доступ к незашифрованным данным на вашем сервере.
Я вижу, что вы неправильно используете термины, кодировка не то, что вы думаете.
кодирование просто преобразовывает данные в определенный формат (например, JSON).
шифрование когда вы берете данные и преобразуете их в нечитаемый формат, используя алгоритм и секретный ключ, шифрование защищает данные от несанкционированного доступа, зашифрованные данные Можно быть расшифрованы в исходное состояние.
хеширования генерирует значение (называемое хешем) из данных с использованием односторонней функции.
Это означает, что, учитывая хэш, вы не можете теоретически вернуть исходное значение.
Это просто общий ответ на ваш вопрос, а не окончательное руководство по безопасности (я не эксперт по безопасности!)
Простой ответ на ваш вопросЗащищены ли данные, представленные в форме?«Да и Нет. Это зависит от того, как вы отправляете свои данные. Если вы используете протокол открытого текста, такой как HTTP, то это небезопасно. Поскольку данные передаются в открытом тексте, и злоумышленник может прослушать и прочитать данные. Однако Если вы отправляете данные через HTTPS, то да, ваши данные отправлены надежно.
Теперь приходит часть хранения данных. Рекомендуется хешировать пароль, используя надежный алгоритм хеширования и солить, прежде чем хранить его в базе данных. Вам не нужно хешировать / кодировать данные, такие как идентификатор электронной почты или имя пользователя. Это может быть сохранено в виде открытого текста.
Короче говоря, если вы передаете данные по SSL и хешируете пароль перед сохранением, вы шифруете данные во время передачи и надежно храните их в БД. Это отраслевой стандарт, и многие компании, в том числе ведущие охранные компании, следуют этому.