Действительно ли стоит зашифровать адреса электронной почты в базе данных?

В тех же строках, что и JSON.encode, следует использовать join ().

function checkArrays( arrA, arrB ){

    //check if lengths are different
    if(arrA.length !== arrB.length) return false;


    //slice so we do not effect the original
    //sort makes sure they are in order
    //join makes it a string so we can do a string compare
    var cA = arrA.slice().sort().join(","); 
    var cB = arrB.slice().sort().join(",");

    return cA===cB;

}

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];  //will return true

console.log( checkArrays(a,b) );  //true
console.log( checkArrays(a,c) );  //false
console.log( checkArrays(a,d) );  //false
console.log( checkArrays(a,e) );  //true

Проблема только в том, что вам нравятся типы, которые были проведены последними сравнительными тестами. Если вам нравятся типы, вам придется зацикливаться.

function checkArrays( arrA, arrB ){

    //check if lengths are different
    if(arrA.length !== arrB.length) return false;

    //slice so we do not effect the orginal
    //sort makes sure they are in order
    var cA = arrA.slice().sort(); 
    var cB = arrB.slice().sort();

    for(var i=0;i<cA.length;i++){
         if(cA[i]!==cB[i]) return false;
    }

    return true;

}

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];

console.log( checkArrays(a,b) );  //true
console.log( checkArrays(a,c) );  //false
console.log( checkArrays(a,d) );  //false
console.log( checkArrays(a,e) );  //false

Если порядок должен оставаться таким же, как это просто цикл, никакой сортировки не требуется.

function checkArrays( arrA, arrB ){

    //check if lengths are different
    if(arrA.length !== arrB.length) return false;


    for(var i=0;i<arrA.length;i++){
         if(arrA[i]!==arrB[i]) return false;
    }

    return true;

}

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];

console.log( checkArrays(a,a) );  //true
console.log( checkArrays(a,b) );  //false
console.log( checkArrays(a,c) );  //false
console.log( checkArrays(a,d) );  //false
console.log( checkArrays(a,e) );  //false
44
задан roo 20 September 2008 в 20:50
поделиться

8 ответов

У Bruce Schneier есть хороший ответ на этот вид проблемы.

Криптография не является решением Ваших проблем безопасности. Это могла бы быть часть решения, или это могла бы быть часть проблемы. Во многих ситуациях криптография начинается путем создания проблемы хуже, и не вообще ясно, что использование криптографии является улучшением.

По существу шифрование Ваших электронных писем в базе данных 'на всякий случай' действительно не делает базу данных более безопасной. Где ключи хранятся для базы данных? Какие полномочия файла используются для этих ключей? Действительно ли база данных accesable публично? Почему? Какие ограничения учетной записи существуют для этих учетных записей? Где машина хранится, у кого есть физический доступ к этому полю? Что относительно удаленного входа в систему/ssh доступ и т.д. и т.д. и т.д.

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

, Конечно, это могло быть частью обширной политики безопасности для Вашей системы - раз так тогда большой!

я не говорю, что это - плохая идея - Но почему имеют блокировку на двери от Deadlocks'R'us, которые стоят 5 000$, когда они могут прорубить фанеру вокруг двери? Или войдите через окно, которое Вы оставили открытым? Или еще хуже они находят ключ, который оставили под половой тряпкой. Безопасность системы только так же хороша как самая слабая ссылка. Если у них есть корневой доступ тогда, они могут в значительной степени сделать то, что они хотят.

Steve Morgan делает правильное замечание, что, даже если они не могут понять адреса электронной почты, они могут все еще причинить большой вред (который мог быть смягчен, если бы у них только был ИЗБРАННЫЙ доступ)

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

52
ответ дан Community 23 September 2019 в 11:35
поделиться

Вместе с большинством требований к защите необходимо понять уровень угрозы.

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

, Что происходит шанс его?

ущерб, нанесенный, если адреса электронной почты ЗАМЕНЯЮТСЯ, мог бы быть намного больше, чем если бы они ПРЕДСТАВЛЕНЫ. Особенно, если Вы, например, используете адрес электронной почты для проверки сбросов пароля к защищенной системе.

шанс паролей, или заменяемых или представленных, очень уменьшается, если Вы хешируете их, но он зависит, что другие средства управления Вы имеете в распоряжении.

9
ответ дан Steve Morgan 23 September 2019 в 11:35
поделиться

Случайно не соединяйте шифрование с путаницей. Мы обычно запутываем электронные письма для предотвращения спама. Много веб-сайтов будет иметь "веб-мастера _at_ mysite.com" для замедления поисковых роботов от парсинга адреса электронной почты как потенциальная цель спама. Это должно быть сделано в шаблонах HTML - нет никакого значения к выполнению этого в персистентном устройстве хранения данных базы данных.

Мы ничего не шифруем, если мы не должны держать его в секрете во время передачи. Когда и где будет Ваши передаваемые данные?

  1. SQL-операторы передаются от клиента к серверу; это находится на том же поле или по безопасному соединению?

  2. , Если Ваш сервер поставился под угрозу, у Вас есть неумышленная передача. Если Вы волнуетесь по поводу этого, то необходимо, возможно, защищать сервер. У Вас есть внешние угрозы, а также внутренние угрозы. ВСЕ пользователи (внешние и внутренние) правильно аутентифицируемый и авторизованный?

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

3
ответ дан S.Lott 23 September 2019 в 11:35
поделиться

Я сказал бы, что это зависит от приложения Вашей базы данных.

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

Pro:

  • утечка А Вашего DB [только 110] не представят адреса электронной почты.

Недостатки:

  • Шифрование означает потерю производительности.
  • Выделяют действий базы данных, будет более твердым если не невозможный.
4
ответ дан Davy Landman 23 September 2019 в 11:35
поделиться

И SQL Server и Oracle (и я верю также DBS других), шифрование поддержки данных на уровне базы данных. Если Вы хотите зашифровать что-то, почему просто не абстрагируют доступ к данным, которые могли быть зашифрованы на стороне сервера базы данных и оставлены, пользователь выбирают, если используют зашифрованные данные (в этом случае, команда SQL будет отличаться), или нет. Если пользователь хочет к пользовательским зашифрованным данным тогда, это может настроить сервер базы данных, и все работы по техническому обслуживанию, соединенные с управлением ключами, сделаны с помощью стандартного инструмента DBA, сделанного от поставщика DB а не от Вас.

2
ответ дан massimogentilini 23 September 2019 в 11:35
поделиться

@Roo

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

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

Мой ответ:

я сказал бы, что, если у Вас есть уязвимые данные, что Вы не хотите падать в неправильных руках, необходимо, вероятно, сделать это настолько трудно, как Вы можете для хакера для получения его, даже если это не на 100% надежно.

0
ответ дан Patrik Svensson 23 September 2019 в 11:35
поделиться

Действительно необходимо взвесить худший сценарий случая кого-то получающего те адреса электронной почты, вероятность кого-то получающего их и дополнительное усилие/время, необходимое к impliement изменение.

0
ответ дан Matt Hanson 23 September 2019 в 11:35
поделиться

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


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

Конечно, когда вы боитесь SQL-инъекций, вы должны убедиться в этом. инъекция запрещена. И резервные копии должны быть зашифрованы сами.

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

Для многих сайтов вышеупомянутое, вероятно, не так, и вам следует сосредоточиться на запрете SELECT * FROM с помощью SQL-инъекции, и убедиться, что посетители не могут каким-то образом Зайдите в личный профиль или информацию о заказе, изменив URL.

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

Для многих сайтов вышеупомянутое, вероятно, не так, и вам следует сосредоточиться на запрете SELECT * FROM с помощью SQL-инъекции, и убедиться, что посетители не могут каким-то образом Зайдите в личный профиль или информацию о заказе, изменив URL.

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

Для многих сайтов вышеупомянутое, вероятно, не так, и вам следует сосредоточиться на запрете SELECT * FROM с помощью SQL-инъекции, и убедиться, что посетители не могут каким-то образом Зайдите в личный профиль или информацию о заказе, изменив URL.

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

Для многих сайтов вышеупомянутое, вероятно, не так, и вам следует сосредоточиться на запрете SELECT * FROM с помощью SQL-инъекции, и убедиться, что посетители не могут каким-то образом Зайдите в личный профиль или информацию о заказе, изменив URL.

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

Для многих сайтов вышеупомянутое, вероятно, не так, и вам следует сосредоточиться на запрете SELECT * FROM с помощью SQL-инъекции и убедиться, что посетители не могут каким-то образом Зайдите в личный профиль или информацию о заказе, изменив URL.

1
ответ дан 26 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: