Авторизация по файлу

1. ramzes (04.05.2012 / 19:33)
Вот появилась такая идея, сделать авторизацию по файлу выдаваемому при регистрации.
Не знаю только на сколько это будет безопасно для защиты аккаунтов.
может у кого нибудь есть мысли на этот счет?

2. Антон (04.05.2012 / 19:40)
типа файл ключей как в кипере? гг
в чем опасность? что файл упрут или что шелл зальют?

3. FUNZIGER (04.05.2012 / 19:47)
шел куда опасней smile

4. Удаленный (04.05.2012 / 20:05)
в принципе - это тоже самое что и пароль пользователя

5. ramzes (04.05.2012 / 20:07)
2. Borland.Delphi, в подборе подходящего файла.
Т.е. проверяется наличие аккаунта с хеш-суммой файла выданного ему файла.
Если таковой находится, то проходит ааторизация.
Ни каких логинов, паролей и прочего.
Быстро и удобно.
Но файл можно подобрать подходящий (имея на руках пример)
Вот в этом я и сомневаюсь..

Добавлено через 01:03 сек.
FUNZIGER (4 Мая 2012 / 19:47)
шел куда опасней smile
Шелл только для дырявых скриптов может быть опасен.

Добавлено через 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, а соль откуда брать?
об аккаунте ни чего не известно, до тех пор пока он не найден по хешу, а общая для всех соль ни чего не даст, все то же, перебор файловsmile
з.ы. 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, я не боюсь, просто мог что то не учесть.
Интересует именно создание файла с нужной хеш-суммой.
на сколько это сложно вообщеsmile и сложно ли

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, тогда не получится идентифицировать по файлу, все внешние ключи не известны при авторизации. есть только фал.
хотя... натолкнул на мысльsmile у файла есть еще один постоянный параметр))

Добавлено через 01:37 сек.
25. MrPink, вот я об этом и спрашивалsmile на сколько это трудно

27. MrPink (05.05.2012 / 01:03)
26. ramzes, ну смотри, если ты будешь делать файлы по 100 байт, то надо будет перебрать до 256^100 вариантов

28. ramzes (05.05.2012 / 01:09)
27. MrPink, 500байт примерно.
но я все таки придумал соль откуда братьsmile
(я опасался того что md5 как известно все таки может выдать идентичный хеш на две совершенно разных строки)

Добавлено через 02:42 сек.
Всем спасибо за советы, с меня плюсыsmile
rezent'у правда пока не могу поставить, придется повременить*пардон*

29. iNeeXT (05.05.2012 / 01:18)
22. ramzes, по твоему скрипту название файла и есть пароль

а я сделал как на хабре)
http://lorinz.ru/213/

30. ramzes (05.05.2012 / 01:19)
29. iNeeXT, ты уверен что понял мой код?;)
я уверен что нетsmile
ты в бд хранишь содержимое файла (по 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, ты уверен что понял мой код?;)
я уверен что нетsmile
ты в бд хранишь содержимое файла (по 1 для каждого юзера) по факту содержимое этого файла - тот же пароль, только еще и не шифрованный.
кстати я уже сейчас вижу уязвимость в твоем подходе (баг влекущий ненадежность всей системы авторизации)
				$extension = array('key');
				if (!in_array(pathinfo($file, PATHINFO_EXTENSION), $extension))
еще момент.
зачем это?
пусть юзер хранит файл как ему нравится. расширение роли не играет файл все равно не наследует расширение после аплоада

почему не шифрованный?

32. ramzes (05.05.2012 / 01:41)
31. iNeeXT,
это ничем не отличается от того, если в ключ в содержимом файла находится
это принципиально отличается от содержимого файла, ты не правильно представляешь.
почему не шифрованный?
потому что в файле у тебя он точно такой же как и бд

Добавлено через 00:47 сек.
не сутьsmile тема не о сравнении. решение я уже нашел

33. iNeeXT (05.05.2012 / 01:49)
хм. а у тебя не так?

34. ramzes (05.05.2012 / 01:58)
33. iNeeXT, нет конечно. у тебя же код перед глазамиsmile
у меня вообще пароль ни как не относится к файлу

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 тестовых акков, и я вам точно могу сказать, файлы гораздо удобнее и быстрееsmile
Вот на счет соли я и гадал.
Брать то ее не откуда.
Сейчас использую хеш из хеш-суммв+вес файла

40. Neformat (06.05.2012 / 11:11)
39. ramzes, да хэш(хеш(файл+соль)) вместо хеш(файл) нужно только на случай кражи БД, а будет там соль одна для всех или уникальная - разницы не вижу

41. ramzes (06.05.2012 / 11:33)
40. Neformat, зная хеш файла, а его узнать не проблема, он в наличии, и зная строку из бд (если вдруг)
Вычислить соль становится ощутимо проще.
Я конечно понимаю, что возможно перестраховываюсь, но собственно по этому я и создал темуsmile
Тогда так
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, спасибо, почитаю завтраsmile

49. Дмитрий (06.05.2012 / 19:09)
Идея с файлом - лажа. Проще ввести логин/пароль, чем выбирать файл с телефона/компа.
К тому же файл может попасть в чужие руки. При этом надо привязывать файл к железу, иначе это очень небезопасно. А сделать это методами PHP очень сложно.
К тому же если файл уже находится на компьютере, то второй файл будет создать нереально, ибо тогда привязка к железу не будет иметь смысла.

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

50. ramzes (06.05.2012 / 20:28)
Вы не понялиsmile
На сколько хороша идея я не спрашиваюsmile
Скажем так, я только край ее озвучилsmile
З.Ы. не вижу смысла привязывать файл к железу, 1 файл - 1 учетка.
А у пользователя и телефон, и комп, и что угодно ещеsmile
Не логично и сводит на нет саму суть идеи.
Интересуют вопросы организации безопасности и всеsmile

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 код уникальный, и вес почти всегда, и хешsmile

55. Андрюха (07.05.2012 / 17:56)
А ну и норм) QR код и так красочный хД

56. ramzes (07.05.2012 / 17:59)
55. Wapruks, вот, а то несут мне какую то фигню про надо и не надо))
с меня плюс, если не ставил ещеsmile

57. Андрюха (07.05.2012 / 18:04)
Всегда пожалуйстаsmile

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, да, вес файла я уже позже ввелsmile
___________
в 24 посте не весь код, весь выкладывать было бы глупоsmile
з.ы. в пароль можно любые символы вводить. по крайней мере я ни когда не ограничивал пользователей в этом.
он все равно в чистом виде не хранится, и авторологинов я не использую

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-код, решил проверить - загрузил этот файл-ключ при авторизации, но выдает что он не действителен sad кстать, ты для генерации qr-кода библиотеку phpqrcode используешь или сервис какой-нибудь?

Добавлено через 01:42 сек.
+ имеются орф. ошибки в тексте письма при регистрации

URL: https://visavi.net/topics/31707