Wpis z mikrobloga

#wykopapi @maciejkiner: logowanie via. wykop_connect zaimplementowane w pythonie już działa :) Dopieszczam jeszcze ostatnie fragmenty, tj. integruje sobie to jako moduł do django-allauth, będzie to można używać prawie na równi z facebookiem/twitterem i innymi takimi serwisami :)

Anyway... mam tylko jedno pytanie. Dlaczego użytkownik nie może za pomocą api udostępnić swojego emaila z rejestracji? Publicznego często ludzie nie mają ustawionego, a prosząc o autoryzacje dla danej aplikacji użytkownik mógłby przecież mieć możliwość zaznaczenia, czy email chce faktycznie udostępnić czy nie (tak robi to większość serwisów).

No i teraz kwestia, dlaczego to może być ważne: Obecnie większość serwisów jako id użytkownika stosuje email. Wiele dobrych stron/frameworków pozwala się logować do strony wieloma kontami (przez FB/G+/Twittera/etc.). Jeżeli użytkownik używa różnych serwisów do autoryzacji, to w praktyce jest w stanie w jednym serwisie przez przypadek stworzyć kilka kont użytkownika.... chyba, że system wykryje, że Ci użytkownicy to tak naprawdę Ci sami użytkownicy, z tym samym adresem email, więc połączy konta (dokładnie tak działa django-allauth).

Wiem, że ten email jest zakodowany w md5, ale przez to dla wszystkich innych authentication providerów będę musiał liczyć md5-kę ze wszystkich emaili, tylko po to, by potem w stałym czasie móc sprawdzić, czy nie istnieje już adres o takim md5 w bazie. Raz, że jest to kłopot, to jeszcze paradoks dnia urodzin sprawia, że prawdopodobieństwo kolizji hashy wcale (chyba?) nie jest takie małe :P

#python #django
  • 14
to jeszcze paradoks dnia urodzin sprawia, że prawdopodobieństwo kolizji hashy wcale (chyba?) nie jest takie małe :P


@noisy: http://pl.wikipedia.org/wiki/Atak_urodzinowy

Algorytm haszujący MD5 generuje 128-bitowe skróty. Daje nam to 2^128 różnych skrótów. Aby jednak trafić na dwa identyczne skróty z 50% prawdopodobieństwem, wystarczy wygenerować ok. 1,1774 * 2^64 skrótów.


no dobra, wcale nie aż takie małe... więc bezpieczeństwu to raczej nie zagrozi, ale i tak fajnie było by mieć adres email.
@maciejkiner: jeszcze jedno pytanie: na zwracany u mnie zakodowany email składa się

:
. Co to za liczba? Z tego co sprawdziłem, hash jest hashem po pierwszej turze, więc nie jest to liczba iteracji hashowania, sól to chyba też nie jest, bo do czego ona by tu była..(?) Da się to do czegoś użyć? :)
@noisy: ten email kodowany jest tak:

md5($email) . ':' . crc32(sha1($email))
w ten sam sposób wystawiał adresy facebook (nie wiem, czy dalej tak robi), więc dzięki porównywaniu tych wartości można było połączyć konta dodane przez FB i Wykop - oryginalnego adresu rejestracji dać z oczywistych względów nie możemy.
@maciejkiner: z tego co wiem, o ile aplikacja poprosi o adres email, a użytkownik udzieli takiego pozwolenia, to może ona dostać i adres email. Co do kwestii tego, czy możecie dać ten adres, czy nie... to oczywiste jest to, że wy nie możecie, natomiast jeżeli użytkownik autoryzując się w danym serwisie swoim loginem i hasłem, wyrazi na to zgodę (tak jak trzeba zatwierdzić na FB, udzielając dostępu np. do tablicy, emaila,
@noisy: no z naszej strony jest to jeden dodatkowy checkbox w konfigurowaniu klucza + jeden przy connekcie. Musiałbym tylko z prawnikami skonfrontować, co na to GIODO, żeby zaraz nie było kontroli bo wyciekają adresy email :)
@maciejkiner: jak będę miał chwile, to zrobie zestawienie, które z najbardziej znanych API tego typu udostępniają email za pozwoleniem, a które nie. Powinno to pomóc się Wam ustosunkować do pomysłu :)
@maciejkiner: w takim razie skupię się na serwisach lokalnych, którym GIODO na 100% cały czas siedzi na głowie:

* NK.pl : http://developers.nk.pl/support/14/w-jaki-spos%C3%B3b-pobra%C4%87-email-u%C5%BCytkownika

* gadu-gadu.pl: http://dev.gg.pl/api/ggapi/rest.html (oni co prawda nie dają możliwości ściągania emaila, ale za to innych równie wrażliwych danych). Mają bardzo ładnie napisane to na stronie:

Parametr ACCESS_TOKEN jest kluczem bezpośrednio związanym z użytkownikiem aplikacji. Klucz pozwala na dostęp tylko do tych zasobów, do których użytkownik wyraził zgodę na dostęp