2012-01-31 3 views
4

Поскольку мой веб-сервер не позволяет использовать ключевые слова PHP_AUTH_USER и PHP_AUTH_PW из-за CGI (Col. Shrapnel in 'PHP_AUTH_USER not set?') Я изучаю другие способы отправки пароля пользователя на сервер.Отправка паролей на сервер

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

Создание динамического хеша с использованием метки времени может предотвратить копирование хэша. Отправка пароля как (timestamp + hash(password+timestamp)) (Last.FM использует что-то вроде этого). Затем сервер может вычесть временную метку (проверьте, не истекает ли она или что-то еще) и хеширует с ней известный пароль и проверяет, совпадают ли они. Но тогда пароль должен быть известен серверу, поэтому остается вопрос:

Как безопасно получить этот пароль на сервере после регистрации?

Затем есть https, требующий сертификата SSL, который недоступен для меня (не стоит денег (еще?)).

Любые мысли?

p.s. В конце концов, я хочу аутентифицировать приложение Android против своего веб-сервера.

+4

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

+0

Это меняет ситуацию. Я посмотрю на это. – nhaarman

+0

Самостоятельные сертификаты. Отказ не будет, поскольку он зависит не от пользователя, а от вашего сервера и вашего клиента. Кроме того, хеширование и добавление метки времени могут ... – Alfabravo

ответ

0

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

Это хэширование с отметкой времени и таково, что это будет только security through obscurity (related question).

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

1

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

+0

Но есть еще «базовый» пароль, который нужно обменять, где обе стороны могут хешировать. Как мне это сделать безопасно? – nhaarman

+1

Если вы делаете этот метод, обязательно обфускайте свой код! Страшно, насколько читаем код, когда вы разбираете свой apk. –

+0

@Niek: нет никакой безопасности в любом механизме безопасности. Решение должно быть пропорционально риску. – SourceMaid

Смежные вопросы