Действительно ли хранение является ответом на секретный вопрос, еще защищают, чем хранение пароля?

У Robert Martin есть превосходное статья о принципе замены Лисков . Это обсуждает тонкие и not-so-subtle пути, которыми может быть нарушен принцип.

Некоторые соответствующие части статьи (отмечают, что второй пример в большой степени сжат):

А Простой Пример Нарушения LSP

Одно из самых явных нарушений этого принципа является использованием Информации о типах во время выполнения (RTTI) C++ для выбора функции, основанной на типе объекта. т.е.:

void DrawShape(const Shape& s)
{
  if (typeid(s) == typeid(Square))
    DrawSquare(static_cast(s)); 
  else if (typeid(s) == typeid(Circle))
    DrawCircle(static_cast(s));
}

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

Квадрат и Прямоугольник, Более тонкое Нарушение.

Однако существуют другие, намного более тонкие, способы нарушить LSP. Рассмотрите заявление, которое использует Rectangle класс, как описано ниже:

class Rectangle
{
  public:
    void SetWidth(double w) {itsWidth=w;}
    void SetHeight(double h) {itsHeight=w;}
    double GetHeight() const {return itsHeight;}
    double GetWidth() const {return itsWidth;}
  private:
    double itsWidth;
    double itsHeight;
};

[...] Предполагают, что однажды пользователи требуют способности управлять квадратами в дополнение к прямоугольникам. [...]

Очевидно, квадрат является прямоугольником для всех нормальных намерений и целей. Так как отношения ISA содержат, логично смоделировать Square класс, как получаемый от Rectangle. [...]

Square наследуется SetWidth и SetHeight функции. Эти функции являются совершенно несоответствующими для Square, так как ширина и высота квадрата идентичны. Это должно быть значительной подсказкой, что существует проблема с дизайном. Однако существует способ обойти проблему. Мы могли переопределить SetWidth и SetHeight [...]

, Но рассмотреть следующую функцию:

void f(Rectangle& r)
{
  r.SetWidth(32); // calls Rectangle::SetWidth
}

, Если мы передаем ссылку на Square объект в эту функцию, эти Square, объект будет поврежден потому что высота won’t быть измененным. Это - четкое нарушение LSP. Функция не работает на производные своих аргументов.

[...]

8
задан JJJ 7 September 2018 в 21:49
поделиться

13 ответов

I allow myself to be guided by OWASP here:

They are unacceptable for the following reasons:

  • Collection of information about people without their explicit consent (such as "Mother's maiden name") is illegal in most privacy regimes. Such collection is subject to privacy laws, review and correction by the subject, and so on.

  • IT Security Policies and standards such as ISO 27000 prohibit the clear text storage of passwords, but almost all Q&A schemes store both the question and answer in the clear

  • The information in the answers is public for a goodly portion of the users of the Internet, and thus is found using public sources

Edit (2018): OWASP seems to have re-arranged their materials. The wayback machine captured a copy of the original page.

7
ответ дан 3 November 2019 в 12:27
поделиться

Пароли - это ответы на «секретный» вопрос. Это вопрос: «Какой у вас пароль?».

Как указывает Сканлифф, добавление дополнительного поля для ввода пользователем может или не может повысить безопасность пароля - это зависит от действий пользователя.

8
ответ дан 3 November 2019 в 12:27
поделиться

Я бы сказал, что комбинация секретный вопрос / ответ - это просто еще одна форма «пароля». Затем я бы предположил, что секретный ответ , вероятно, слабее, чем обычный пароль, так как редко есть предложения, что это должно быть что-то, кроме обычных слов, уязвимых для словарных атак. В большинстве случаев словарное пространство ответа значительно сокращается из-за контекста вопроса (однако, отмечено исключение Сканлиффа).

3
ответ дан 3 November 2019 в 12:27
поделиться

Идиома вопросов и ответов использовалась во многих опубликованных «хакерских атаках на электронную почту» ( пример ) - я бы, конечно, избегал ее использования.

7
ответ дан 3 November 2019 в 12:27
поделиться

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

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

2
ответ дан 3 November 2019 в 12:27
поделиться

Мне кажется, что часть вашего вопроса упускают из виду. Потому что, как и вы, я вижу, как мы каким-то образом упускаем из виду здравый смысл, что если вы не должны хранить их пароль в виде обычного текста, но вы готовы сохранить их ответ на их `` секретный вопрос '' в виде обычного текста, а затем позволить им сбросить свой пароль через Ссылка, отправленная по электронной почте, почему даже есть секретный вопрос и просто отправьте им ссылку для сброса. Конечно, вы можете так же легко зашифровать ответ на вопрос.

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

2
ответ дан 3 November 2019 в 12:27
поделиться

i would use a secret question to determine if I should or shouldn't send them a newly generated password via an email. Never to let them set a new one. At the end of the day though, it all comes down to make it as secure as it needs to be. If you're an online bank or a networking site makes a huge difference.

3
ответ дан 3 November 2019 в 12:27
поделиться

Это также зависит от того, насколько связаны секретный вопрос / ответ.

Показательный пример, когда мне предоставляется возможность задать вопрос, я ввел что-то вроде:

Question: Groovy Broccoli?

Answer: International Space Station 431

Это не настоящие вопросы / ответы, которые я использую, но могу заверить вас, что вопросы, которые я использую, не дают никакого ключа к ответу.

1
ответ дан 3 November 2019 в 12:27
поделиться

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

Однако, если пользователь использует тот же пароль в других системах, то, по крайней мере, хеширование пароля предохраняет его от использования в других системах, например в его онлайн-банке.

1
ответ дан 3 November 2019 в 12:27
поделиться

Суть защиты секретного вопроса обычно заключается в альтернативном надежном средстве связи. Если пользователь правильно отвечает на «секретный вопрос», сервер должен предоставить случайный пароль через доверенный канал (например, адрес электронной почты).

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

1
ответ дан 3 November 2019 в 12:27
поделиться

Это зависит от требований безопасности, которые вам требуются ... И как только они уже ответят на эту часть.

Единственное, что я должен добавить, это то, что вы используете шифрование MD5 для хранения паролей и другие конфиденциальные данные. Имейте в виду, что в настоящее время практически невозможно обнаружить «фразу», зашифрованную с помощью MD5. Вы можете найти множество статей об этом. И не сложно реализовать в ваших проектах.

С уважением. Фабио Антунес

1
ответ дан 3 November 2019 в 12:27
поделиться

"Greetings, Professor Falken." or why it is not a good idea to base any authentication scheme on non-secret, non-random-"ish" responses.

And, if you try to be a little tricky and choose random-"ish" responses to the notorious maiden-name-questions and are able to remember them AFTER you have forgotten your password (and probably have changed it a few times since setting the "secret question".

Nay, the whole secret-questions scheme is botched from the start. For a start, the question is not secret but revealed to anybody claiming to have mislaid your password.

1
ответ дан 3 November 2019 в 12:27
поделиться

Я бы также порекомендовал начать с реализации VCS (системы контроля версий) для самостоятельно . Я бы рекомендовал использовать одну из распределенных VCS (Git, Mercurial, Bazaar) вместо централизованной Subversion, потому что было бы проще создать центральный репозиторий (или репозитории) путем клонирования, чем перемещать репозиторий Subversion в центральное место . Распределенный SCM также может использоваться в небольшой группе для обмена идеями.

Несколько преимуществ (современных) систем управления версиями:

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

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

5
ответ дан 3 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

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