2013-05-16 7 views
1

Я сохраняю пароли после bcrypting, но пользовательские идентификаторы электронной почты как обычный текст (без шифрования), потому что я хочу регулярно отправлять информационные бюллетени на эти электронные письма. У меня есть два вопроса?Как защитить идентификаторы электронной почты, хранящиеся в базе данных?

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

  2. Есть ли способ проверить конкретную таблицу базы данных, только мою веб-форму можно получить не извне?

примечание: Я новый в базе данных.

+4

Если кто-то может видеть вашу необработанную базу данных, вы уже делаете что-то неправильно. – woz

+0

Я новичок в базе данных, пытаясь понять. можете ли вы объяснить об этом больше? – VDN

+0

Вам просто нужно практиковать всю необходимую безопасность. Например, см. Http://www.acunetix.com/websitesecurity/webserver-security/ (любопытно, что на этой странице не упоминаются брандмауэры, возможно, потому, что ее очевидный должен иметь хорошо настроенный брандмауэр на всех серверах) – barryhunter

ответ

0

Нет ничего плохого в хранении электронных писем в открытом тексте. Даже если они доступны, они не позволяют злоумышленнику получить доступ к учетным записям (при условии, что аутентификация работает правильно). Нет причин для их шифрования, если у вас нет особых требований, о которых мы не знаем.

Если вы хотите защитить вашу базу данных в целом:

  • читать документацию базы данных
  • , если у вас есть несколько услуг/сценарии доступ к данным, убедитесь, что у них есть отдельные счета и имеют доступ только к данных, которые им необходимы для доступа
  • убедитесь, что резервные копии базы данных не менее безопасны, чем сама база данных
  • ограничить исходные хосты (возможно, при настройке пользователей), чтобы учетные записи разрешали подключения только из вашего веб-интерфейса, или если Y ou're работает на том же хосте, может быть, вы можете отключить все, кроме loopback (привязать базу данных к 127.0.0.1)
  • ... загрузите другие вещи, но начните с основ ... вы найдете больше идей, содержащихся в документации, я уверен, что
+1

Если они получают идентификатор электронной почты из они могут использовать его для отправки спам-писем на эти идентификаторы. Я беспокоюсь за это. – VDN

+1

ну, вы должны защитить базу данных, поэтому ее неясно они могут получить доступ к базе данных. – barryhunter

+0

Это не может быть популярным видом ... но в сегодняшнем мире я не думаю, что кто-нибудь заметил бы (если бы это не было нацелено на спам, пытающийся забирайте ваших пользователей) - сотни спам-сообщений в день являются для меня нормой - они автоматически отфильтровываются. Если вы получаете хакерскую услугу, а кто-то получает список ваших пользователей ... Я бы сказал, что их спам не является одной из самых больших проблем. Просто обеспечьте как можно больше, чтобы этого не произошло. – viraptor

1

1- Если вы действительно хотите кодировать сообщения электронной почты, и нужно декодировать их в будущем, лучше всего смотреть на функции шифрования данных MySQL, как ENCODE() и DECODE(). Сначала вам нужно настроить «соль». Это похоже на секретный код. Это может быть одинаковым для каждой записи, как это:

SELECT DECODE(email, 'mysecretsalt') FROM Table WHERE id=1 

Или, вы можете сделать соленую часть из кода и еще одно поле в таблице, как это:

SELECT DECODE(email, CONCAT('mysecretsalt', id)) FROM Table WHERE id=1 

2- Set до определенного пользователя в вашей базе данных, которая ТОЛЬКО имеет доступ к этой конкретной таблице, и ТОЛЬКО имеет привилегии INSERT для добавления записей, а затем другого пользователя, который имеет только привилегии SELECT при получении записей. Кроме того, заблокируйте этих пользователей до «localhost». Если хакер получает один из них, они не могут многое сделать.

Кроме того, когда вы получаете электронное письмо от клиента в форме переменной запроса (GET или POST), чтобы защитить от атак SQL-инъекций, либо escape-символов (в PHP, вы можете использовать mysqli_real_escape_string()) или просто избавиться всех символов, которые не принадлежат. В PHP это будет выглядеть так:

$email = preg_replace('/[^A-Za-z0-9\\[email protected]_]/', '', $email); 

Вот как мне это нравится.