Авторизация по файлу
1.
ramzes (04.05.2012 / 19:33)
Вот появилась такая идея, сделать авторизацию по файлу выдаваемому при регистрации.
Не знаю только на сколько это будет безопасно для защиты аккаунтов.
может у кого нибудь есть мысли на этот счет?
2.
Антон (04.05.2012 / 19:40)
типа файл ключей как в кипере? гг
в чем опасность? что файл упрут или что шелл зальют?
3.
FUNZIGER (04.05.2012 / 19:47)
шел куда опасней
4.
Удаленный (04.05.2012 / 20:05)
в принципе - это тоже самое что и пароль пользователя
5.
ramzes (04.05.2012 / 20:07)
2.
Borland.Delphi, в подборе подходящего файла.
Т.е. проверяется наличие аккаунта с хеш-суммой файла выданного ему файла.
Если таковой находится, то проходит ааторизация.
Ни каких логинов, паролей и прочего.
Быстро и удобно.
Но файл можно подобрать подходящий (имея на руках пример)
Вот в этом я и сомневаюсь..
Добавлено через 01:03 сек.
FUNZIGER (4 Мая 2012 / 19:47)
шел куда опасней
Шелл только для дырявых скриптов может быть опасен.
Добавлено через 02:27 сек.
Рашид (4 Мая 2012 / 20:05)
в принципе - это тоже самое что и пароль пользователя
Именно так. С той лишь разницей, что в обычной авторизации 2 ключа мыло+пароль, логин+пароль.
А тут только 1.
6.
Удаленный (04.05.2012 / 20:15)
5, + лишний гемор, если чел захочет с телефона зайти, с др компа
7.
ramzes (04.05.2012 / 20:28)
6.
Рашид, так обычную авторизацию ни кто не отменял же.
это дополнительный способ, позволяющий не запоминать ни логин ни пароль
8.
MrPink (04.05.2012 / 20:40)
1.
ramzes, а в чем проблема?Генерь файл и сохраняй хэш его?
9.
Neformat (04.05.2012 / 20:45)
ramzes (4 Мая 2012 / 20:28)
6. Рашид, так обычную авторизацию ни кто не отменял же.
это дополнительный способ, позволяющий не запоминать ни логин ни пароль
С тем же успехом можно выдать пользователю уникальный ID какой нибудь, куда проще копировать вставить этот ID чем хранить и вставлять этот файл.
10.
ramzes (04.05.2012 / 20:46)
8.
MrPink, проблема в том что это всего лишь мд5 хеш-сумма файла.
можно подобрать.
интересует, легко ли сгенерить файл с нужной хеш-суммой?
Добавлено через 02:53 сек.
Neformat (4 Мая 2012 / 20:45)
С тем же успехом можно выдать пользователю уникальный ID какой нибудь, куда проще копировать вставить этот ID чем хранить и вставлять этот файл.
ид надо запоминать.
ид можно просто перебором подобрать,.
куда проще копировать вставить этот ID
- не проще, его так же надо хранить где то, его надо открыть, скопировать из него, вставить.(или же запоминать, но тогда смысл вообще теряется, запоминать можно и пароли, но идея как раз в том что бы ни чего не запоминать)
файл просто выбрал и все.
11.
MrPink (04.05.2012 / 20:50)
10.
ramzes, ну сделалай хэш с солью.
12.
ramzes (04.05.2012 / 20:56)
11.
MrPink, а соль откуда брать?
об аккаунте ни чего не известно, до тех пор пока он не найден по хешу, а общая для всех соль ни чего не даст, все то же, перебор файлов
з.ы.
http://tfile.info/file/186/ это ключ
http://smartoff.net/verify/ это вход.
Может кто что накопает каверзное..
13.
MrPink (04.05.2012 / 21:11)
12.
ramzes, я не пойму чего ты боишься. ведь подбирать файл намного дольше чем пароль.
14.
iNeeXT (04.05.2012 / 21:25)
Файл с паролем ( например
ineext.key ) -> загрузка -> чтение файла -> поиск в бд содержимого по указанному полю -> результат
Добавлено через 03:46 сек.
Вроде на хабре идет так проверка инвайта
15.
Виталий (04.05.2012 / 22:03)
не вроде, а так оно и есть)))
Добавлено через 04:02 сек.
лично для меня это кажется извращением, т.к. , как мне кажется, легче будет вбить свой логин и пароль, чем лазть в проводник за файлом ИМХО)
16.
Димон (04.05.2012 / 22:50)
Для авторизации это как-то геморно, сделай восстановление пароля так.. Либо по ключу либо по QR коду ключа
17.
ramzes (04.05.2012 / 23:06)
iNeeXT (4 Мая 2012 / 21:25)
Файл с паролем ( например ineext.key ) -> загрузка -> чтение файла -> поиск в бд содержимого по указанному полю -> результат
у меня не так. содержимое файла изменить проще чем его хеш сумму до нужного.
(как мне кажется)
Добавлено через 04:31 сек.
Виталик Альянс (4 Мая 2012 / 22:03)
не вроде, а так оно и есть)))
Добавлено через 04:02 сек.
лично для меня это кажется извращением, т.к. , как мне кажется, легче будет вбить свой логин и пароль, чем лазть в проводник за файлом ИМХО)
я же говорю, запоминать пароль напряжнее чем хранить файл
не суть, меня интересуют подводные камни такого решения, а не его кпд, обычную авторизацию я не убираю.
18.
ramzes (04.05.2012 / 23:29)
13.
MrPink, я не боюсь, просто мог что то не учесть.
Интересует именно создание файла с нужной хеш-суммой.
на сколько это сложно вообще
и сложно ли
19.
MrPink (05.05.2012 / 00:03)
18.
ramzes, а откуда хакер узнает эту хэш сумму?
20.
ramzes (05.05.2012 / 00:22)
19.
MrPink, он и не узнает,
для перебора например нагенерить. (ну чисто теоретически)
21.
iNeeXT (05.05.2012 / 00:28)
В файле например держи md5, в базе `password`. Когда происходит авторизация - проверяет и определяет результат, это все просто.
Добавлено через 01:51 сек.
Сейчас накатаю быстренько пример
22.
ramzes (05.05.2012 / 00:50)
21.
iNeeXT, ты не понял.
в файле нет вообще ни чего относящегося к аккаунту.
ни пароля, ни его хеша
сам файл и есть пароль
23.
Игорь (05.05.2012 / 00:52)
22.
ramzes, Random символы, затем запоминаем хэш этого файла?
24.
ramzes (05.05.2012 / 00:54)
<?
if($_FILES['verify']['type']=='image/png'){
$prov = $sql->query("SELECT id, password, verify FROM users WHERE verify = '".md5(md5_file($_FILES['verify']['tmp_name']))."';")->fetch_assoc();
if($prov['verify']!=''){
$_SESSION['my_id'] = $prov['id'];
$_SESSION['my_pass'] = cript($prov['password']);
SetCookie('my_id', $_SESSION['my_id'], (time()+(3600*24*365)), '/', '.'.$_SERVER['HTTP_HOST']);
SetCookie('my_pass', $_SESSION['my_pass'], (time()+(3600*24*365)), '/', '.'.$_SERVER['HTTP_HOST']);
Header("Location: /");
}else{
$_SESSION['error'] = 'Ключ не действителен!';
Header("Location: ./");
}
}else{
$_SESSION['error'] = 'Неподходящий файл!';
Header("Location: ./");
}
}else{
$_SESSION['error'] = 'Неверный запрос!';
Header("Location: ./");
}
25.
MrPink (05.05.2012 / 00:55)
20.
ramzes, представляешь сколько там генерить? Пароли же у тебя не подбирают, хотя там намно меньше вариантов
26.
ramzes (05.05.2012 / 00:55)
23.
rezent, тогда не получится идентифицировать по файлу, все внешние ключи не известны при авторизации. есть только фал.
хотя... натолкнул на мысль
у файла есть еще один постоянный параметр))
Добавлено через 01:37 сек.
25.
MrPink, вот я об этом и спрашивал
на сколько это трудно
27.
MrPink (05.05.2012 / 01:03)
26.
ramzes, ну смотри, если ты будешь делать файлы по 100 байт, то надо будет перебрать до 256^100 вариантов
28.
ramzes (05.05.2012 / 01:09)
27.
MrPink, 500байт примерно.
но я все таки придумал соль откуда брать
(я опасался того что md5 как известно все таки может выдать идентичный хеш на две совершенно разных строки)
Добавлено через 02:42 сек.
Всем спасибо за советы, с меня плюсы
rezent'у правда пока не могу поставить, придется повременить*пардон*
29.
iNeeXT (05.05.2012 / 01:18)
22.
ramzes, по твоему скрипту название файла и есть пароль
а я сделал как на хабре)
http://lorinz.ru/213/
30.
ramzes (05.05.2012 / 01:19)
29.
iNeeXT, ты уверен что понял мой код?;)
я уверен что нет
ты в бд хранишь содержимое файла (по 1 для каждого юзера) по факту содержимое этого файла - тот же пароль, только еще и не шифрованный.
кстати я уже сейчас вижу уязвимость в твоем подходе (баг влекущий ненадежность всей системы авторизации)
$extension = array('key');
if (!in_array(pathinfo($file, PATHINFO_EXTENSION), $extension))
еще момент.
зачем это?
пусть юзер хранит файл как ему нравится. расширение роли не играет файл все равно не наследует расширение после аплоада
31.
iNeeXT (05.05.2012 / 01:24)
30.
ramzes,
самое главное тут:
$prov = $sql->query("SELECT id, password, verify FROM users WHERE verify = '
".md5(md5_file($_FILES['verify']['tmp_name']))."';")->fetch_assoc();
это ничем не отличается от того, если в ключ в содержимом файла находится
я себе так это представляю
Добавлено через 06:15 сек.
ramzes (4 Мая 2012 / 23:19)
29. iNeeXT, ты уверен что понял мой код?;)
я уверен что нет
ты в бд хранишь содержимое файла (по 1 для каждого юзера) по факту содержимое этого файла - тот же пароль, только еще и не шифрованный.
кстати я уже сейчас вижу уязвимость в твоем подходе (баг влекущий ненадежность всей системы авторизации)
$extension = array('key');
if (!in_array(pathinfo($file, PATHINFO_EXTENSION), $extension))
еще момент.
зачем это?
пусть юзер хранит файл как ему нравится. расширение роли не играет файл все равно не наследует расширение после аплоада
почему не шифрованный?
32.
ramzes (05.05.2012 / 01:41)
31.
iNeeXT,
это ничем не отличается от того, если в ключ в содержимом файла находится
это принципиально отличается от содержимого файла, ты не правильно представляешь.
почему не шифрованный?
потому что в файле у тебя он точно такой же как и бд
Добавлено через 00:47 сек.
не суть
тема не о сравнении. решение я уже нашел
33.
iNeeXT (05.05.2012 / 01:49)
хм. а у тебя не так?
34.
ramzes (05.05.2012 / 01:58)
33.
iNeeXT, нет конечно. у тебя же код перед глазами
у меня вообще пароль ни как не относится к файлу
35.
iNeeXT (05.05.2012 / 02:39)
34.
ramzes, а как происходит авторизация через `verify` ?
36.
ктулху (05.05.2012 / 10:44)
Лучше уж по сертификатам... чтоб импортировал в браузер и забыл (пример light.webmoney.ru).
37.
ramzes (05.05.2012 / 15:55)
36.
ShiftBHT, пытался погуглить, ни чего не нашел((
38.
Neformat (05.05.2012 / 20:01)
ramzes (4 Мая 2012 / 20:46)
8. MrPink, проблема в том что это всего лишь мд5 хеш-сумма файла.
можно подобрать.
интересует, легко ли сгенерить файл с нужной хеш-суммой?
Добавлено через 02:53 сек.
ид надо запоминать.
ид можно просто перебором подобрать,.
- не проще, его так же надо хранить где то, его надо открыть, скопировать из него, вставить.(или же запоминать, но тогда смысл вообще теряется, запоминать можно и пароли, но идея как раз в том что бы ни чего не запоминать)
файл просто выбрал и все.
Да я не к тому, обывателю на много сложнее выполнить какие то манипуляции с файлом (сохранить или аплоадить через браузер) нежели записать и ввести пароль/ID/хэш или еще чего . Да и в плане безопасности, на счет генерации файла с заданным хэшем не скажу точно, а строку сгенерировать по заданному хэшу - это реализуется.
А вот в качестве дополнительного способа авторизации - вполне интересная мысль. Вот только для пущей безопасности в базе нужно хранить ни хэш файла этого а к примеру посоленных хэш от хэша файла.
39.
ramzes (05.05.2012 / 23:05)
38.
Neformat, это и есть дополнительный тип авторизации.
у меня сейчас 6 тестовых акков, и я вам точно могу сказать, файлы гораздо удобнее и быстрее
Вот на счет соли я и гадал.
Брать то ее не откуда.
Сейчас использую хеш из хеш-суммв+вес файла
40.
Neformat (06.05.2012 / 11:11)
39.
ramzes, да хэш(хеш(файл+соль)) вместо хеш(файл) нужно только на случай кражи БД, а будет там соль одна для всех или уникальная - разницы не вижу
41.
ramzes (06.05.2012 / 11:33)
40.
Neformat, зная хеш файла, а его узнать не проблема, он в наличии, и зная строку из бд (если вдруг)
Вычислить соль становится ощутимо проще.
Я конечно понимаю, что возможно перестраховываюсь, но собственно по этому я и создал тему
Тогда так
md5(соль,md5(md5_file().filesize))
Сурово получается))
42.
Петр (06.05.2012 / 12:00)
Теоретически, подбирать пароли для всех пользователей (если их много) становится легче, т.к. 1 запрос на всех пользователей сразу. Кстати, нужна проверка на размер, чтобы не вычислять хеши заведомо больших файлов.
43.
ramzes (06.05.2012 / 13:48)
42.
Im-ieee, там соль размер файла
44.
Петр (06.05.2012 / 14:03)
И что? Хэш-то все равно вычисляться будет, даже от больших файлов. А размер файла, кстати, вообще ни на что не влияет, т.к. он однозначно определяется. (все равно, что часть содержимого файла)
45.
ramzes (06.05.2012 / 15:18)
44.
Im-ieee, ты не понял, хеш файла даже верный, ни чего не даст если размер файла не совпадет
46.
ктулху (06.05.2012 / 15:50)
http://www.opennet.ru/base/sec/ssl_cert.txt.html
Добавлено через 05:53 сек.
http://it-giki.com/post/336.html
это наверное посложнее, но на мой взгляд более правильно.
47.
Петр (06.05.2012 / 17:23)
45.
ramzes, ну и что - зато может совпасть хэш хэша с размером, даже если сами файлы разные. Все равно коллизии есть в любом случае. :-)
48.
ramzes (06.05.2012 / 18:15)
47.
Im-ieee, шанс не реально мал.
гораздо более вероятно соврадение хешей двух разных паролей
Добавлено через 01:22 сек.
46.
ShiftBHT, спасибо, почитаю завтра
49.
Дмитрий (06.05.2012 / 19:09)
Идея с файлом - лажа. Проще ввести логин/пароль, чем выбирать файл с телефона/компа.
К тому же файл может попасть в чужие руки. При этом надо привязывать файл к железу, иначе это очень небезопасно. А сделать это методами PHP очень сложно.
К тому же если файл уже находится на компьютере, то второй файл будет создать нереально, ибо тогда привязка к железу не будет иметь смысла.
Подобный вид авторизации удобен для Desctop приложений, когда у программы есть прямой доступ к дискам и системным папкам. В таком случае файл будет взят автоматически из того места, которое прописано в настройках софтины (юзер указал при создании файла).
50.
ramzes (06.05.2012 / 20:28)
Вы не поняли
На сколько хороша идея я не спрашиваю
Скажем так, я только край ее озвучил
З.Ы. не вижу смысла привязывать файл к железу, 1 файл - 1 учетка.
А у пользователя и телефон, и комп, и что угодно еще
Не логично и сводит на нет саму суть идеи.
Интересуют вопросы организации безопасности и все
51.
Петр (07.05.2012 / 06:18)
48.
ramzes шансы, на мой взгляд, одинаковы. Мы же не знаем, среди каких строк находятся коллизии. Хотя, конечно, они малы в любом случае: в файл, в отличие от пароля, можно записать, что угодно.
52.
ramzes (07.05.2012 / 17:01)
51.
Im-ieee, в пароль как раз записать можно что угодно))
А файл должен быть сторого картинкой png и строго определенного веса
53.
Андрюха (07.05.2012 / 17:08)
В общем md5('salt', md5_file());
для каждого файла свой размер
картинку красочную
И взлом стремиться к нулю)))
54.
ramzes (07.05.2012 / 17:38)
53.
Wapruks, там картинка QR код.
Естественно и сам qr код уникальный, и вес почти всегда, и хеш
55.
Андрюха (07.05.2012 / 17:56)
А ну и норм) QR код и так красочный хД
56.
ramzes (07.05.2012 / 17:59)
55.
Wapruks, вот, а то несут мне какую то фигню про надо и не надо))
с меня плюс, если не ставил еще
57.
Андрюха (07.05.2012 / 18:04)
Всегда пожалуйста
58.
ramzes (07.05.2012 / 18:22)
md5('wfhtvnjybkt'.md5(md5_file($_FILES['qr']['tmp_name']).$_FILES['qr']['size'])); вот так я сделал,
думаю этого будет достаточно
59.
Петр (08.05.2012 / 05:45)
52.
ramzes, насчет картинки, я действительно что-то пропустил :-). В пароль нельзя вставить, скажем, разные управляющие символы, я это имел в виду. Насчет "определенного веса" - ты его нигде отдельно не проверяешь (в 24 посте), поэтому можно загрузить любой файл, и есть вероятность совпадения хэшей, хоть и небольшая.
60.
Андрюха (08.05.2012 / 10:44)
59. Да какая там вероятность? Хеш хеша файла плюс соль. Один пиксель не так и все. В принципе коллизия везде же возможна,но она очень маловероятна
61.
ramzes (08.05.2012 / 13:15)
59.
Im-ieee, да, вес файла я уже позже ввел
___________
в 24 посте не весь код, весь выкладывать было бы глупо
з.ы. в пароль можно любые символы вводить. по крайней мере я ни когда не ограничивал пользователей в этом.
он все равно в чистом виде не хранится, и авторологинов я не использую
62.
Tony V (09.05.2012 / 16:54)
Не думаю, что это юзабельная идея. как уже сказали, у человека может быть несколько устройств, файл может быть поврежден вирусом, да и просто потеряться при переустановке системы. На мобильных устройствах и того хуже: браузер может просто не поддерживать апплоад.
Если нужна привязка к браузеру, могу посоветовать HTML 5 local storage.
Ну а если хочется неординарный метод: это пароль голосом через гугловское api
63.
KOZZ (09.05.2012 / 17:44)
На мобильных устройствах и того хуже: браузер может просто не поддерживать апплоад.
Такие экспонаты уже почти вымерли, так что ориентироваться на них не вижу смысла.
64.
Виталий (21.07.2012 / 08:08)
1. зарегистрировался на сайте, на почтовый ящик пришел QR-код, решил проверить - загрузил этот файл-ключ при авторизации, но выдает что он не действителен
кстать, ты для генерации qr-кода библиотеку phpqrcode используешь или сервис какой-нибудь?
Добавлено через 01:42 сек.
+ имеются орф. ошибки в тексте письма при регистрации
URL:
https://visavi.net/topics/31707