Вопрос

Я создаю приложение, похожее на PHPMYADMIN (UI управления баз данных). Пользователю необходимо аутентифицировать себя против базы данных, и приложение необходимо как-то хранить учетные данные. SSL не является вариантом для всех установок.

  • Идея 1: Пользователь отправляет учетные данные, приложение хранит имени пользователя и шифрует пароль, используя предварительно определенный секретный ключ Blowfish (config.ini.php) - это то, что делает phpmyadmin.
  • Идея 2: Форма входа в систему Создает Случайный секрет взрыва (JavaScript), пользователь отправляет учетные данные, приложение, зашифрованные пользователю / пароль и хранят их на стороне сервера в сеансе, секретный ключ хранится в cookie и отправлено на каждый запрос.

Идея 1: проблема, если безопасность сервера нарушена. (Ключ находится в конфиге, данные сеанса в / tmp)
Идея 2: проблема с атакой человека в среднем. (Ключ + учетные данные отправляются)

Любые другие предложения? Критика?

Это было полезно?

Решение

Заданные проблемы не разрешаются в абсолютном смысле. Сервер не является на 100% безопасным, и каждая атака «Man-In-Fix» может быть сделана на шаг дальше.

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

Когда дело доходит до чередования «человеко-в-средних» атаках, то Uber-подход будет использовать один раз прокладки, Предварительно поделился в автономном режиме. Это то, какие агентства безопасности делают - все остальные варианты оставьте ваше приложение более или менее зависят от благотворительности устройств между вашим сервером и пользовательским устройством. Таким образом, вам нужно решить о вашем уровне терпимости.

Один разумно безопасный метод аутентификации нулевое доказательство знаний. Отказ Это требует вашего приложения только для того, чтобы знать открытый ключ пользователя. Нет паролей, нет секретов. Дело в том, что когда пользователь хочет войти в систему, ваше приложение должно отвечать случайным сообщением, зашифрованным открытым ключом этого пользователя. Если другая сторона отправляет обратно правильное произвольное сообщение, то он указывает на хранение соответствующего закрытого ключа. Следовательно, пользователь аутентифицирован. Чтобы предотвратить подслушивание, заставьте пользовательскийAgent зашифровать правильный ответ с открытым ключом приложения перед отправкой ответа. Тем не менее, реализация необходимой функциональности и достойного GUI для всего этого не будет тривиальной задачей.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top