[x] Drogi Czytelniku, wygląda na to, że korzystasz z oprogramowania blokującego wyświetlanie reklam. Wyświetlane tu reklamy nie mają inwazyjnej formy i nie utrudnią Ci nawigacji, a środki z reklam pozwalają mi utrzymać serwis i pomagają w jego dalszym rozwoju. Z góry dziękuję za wyrozumiałość.

(Nie)Bezpieczeństwo API przykładem BLIPa

?

blip80Witajcie.

Muszę przyznać, że tego wpisu w ogóle nie planowałem. Jednakże sytuacja z raviciousem natchnęła mnie do tego aby opisać to, ponieważ problem wcale nie jest zbyt błahy a blipa nie używa znowu tak bardzo mało użytkowników. Zapraszam do lekturki

Co to jest API?

API jest to interfejs dla zewnętrznych aplikacji pozwalający na dostęp do konta użytkownika. Serwis dzięki posiadaniu API może być rozwijany również przez niezależnych użytkowników programistów. BLIP dzięki posiadaniu API ma bardzo wiele dodatków stworzonych właśnie przez niezależnych od twórców serwisu ludzi. Przykładowo szmerybajery umożliwia logowanie po ich stronie użytkownika i oni dokonują analizy danych z API w swoich funkcjach.

Uwierzytelnianie

Jak wiadomo skoro API działa na koncie użytkownika wymagana jest autoryzacja. Różne API robią to na przeróżny sposób:

  • Login i HasÅ‚o użytkownika – najgorszy sposób, a zarazem używany przez Blipa, wymaga zaufania użytkownika a także stawia szereg problemów dla serwisu wykorzystujÄ…cego takowe API
  • ApiKey – nieco lepszy sposób, używany przez Flakera, jednakże niezbyt przyjazny dla użytkownika, ten podczas rejestracji w serwisie używajÄ…cym takiego API może nie wiedzieć o jaki klucz jest pytany
  • OAuth – najlepszy sposób, używany przez Twittera, autoryzacja polega na tym, że serwer klienta API posiada wÅ‚asne keye wygenerowane przez API, a w momencie gdy chce uzyskać dostÄ™p do konta użytkownika, ten ostatni jest odsyÅ‚any na oryginalnÄ… stronÄ™ serwisu w którym dodaje serwis kliencki API do listy dozwolonych, i od tego momentu key tego serwisu ma dostÄ™p do jego konta, czasowy lub staÅ‚y, zależnie od konfiguracji jednakże w tym przypadku co ważne caÅ‚ość po stronie serwisu klienta API odbywa siÄ™ bez hasÅ‚a użytkownika, wiÄ™cej o tym możesz przeczytać na stronie Dev GGAPI

Problem bezpieczeństwa BLIPa

Jak wspomniaÅ‚em wczeÅ›niej BLIP używa najgorszej z metod autoryzacji użytkownika w API – jego loginu i hasÅ‚a. Taka sytuacja stawia dla programisty serwisu zewnÄ™trznego poważny problem. Jestem twórcÄ… BBoTa i mogÄ™ siÄ™ wypowiedzieć nt. swoich problemów z tym zwiÄ…zanych.

Problem 1 – Jak przechowywać hasÅ‚o użytkownika?

Pierwszym problemem jest przechowywanie hasÅ‚a użytkownika. Jak to zrobić? Skoro do API trzeba podstawić login i hasÅ‚o użytkownika nie można go w swojej bazie zaszyfrować niczym jednostronnym np. MD5. Szyfrowanie musi być odwracalne, i tutaj można sobie wÅ‚asny sposób napisać (np kilka rot13, base64 itd.) , który sprawi, że bez kodu źródÅ‚owego baza bÄ™dzie lekko utrudniona do przeczytania. I tu nastÄ™pna sprawa. Deszyfrator musi być na serwerze, bo przecież aplikacja musi to zdeszyfrować gdy przyjdzie użytkownik. To sprawia, że hasÅ‚a użytkownika maÅ‚o który serwis przechowuje, niektóre może plaintextem? Mój dodatek to bot na komunikatorze, wiÄ™c hasÅ‚a trzymać musi, aby użytkownik ich nie podawaÅ‚ za każdym razem, jak rozwiÄ…zaÅ‚em tÄ™ kwestiÄ™ – nie powiem.

Problem 2 – Zaufanie użytkownika

Kolejnym problemem jest zaufanie użytkownika takiej aplikacji osoby trzeciej. Skoro użytkownik podaje swoje hasÅ‚o to ma prawo siÄ™ o nie bać. I sÅ‚usznie. Skoro problem1 pokazuje, że ciężko je przechowywać, to użytkownik prawdopodobnie go nie poda. W ten sposób użytkownik jest odciÄ™ty od aplikacji osób trzecich, a te aplikacje od użytkownika. RozwiÄ…zanie? W moim bocie jest nim wersja bez hasÅ‚a. Bot korzysta wtedy ze swojego konta, użytkownik jest “read-only” i ma zabronione tylko wysyÅ‚anie do blipa. Użytkownika sobie tu weryfikujÄ™ poprzez podesÅ‚anie mu pmem kodu aktywacyjnego. Ale to pokazuje, że bez zaufania nie bÄ™dzie peÅ‚nej funkcjonalnoÅ›ci.

A rozwiÄ…zanie jest proste…

Tak, rozwiązanie tych problemów jest proste. Nie wymagam od BLIPa dużo, w końcu jego właścicielem jest Gadu-Gadu. Wystarczyłby ApiKey który użytkownik by znalazł w swoim profilu. Zamiast loginu i hasła podawałby w aplikacji zewnętrznej ApiKey. Rozwiązało by to oba problemy za jednym razem. Przechowywanie ApiKeya nie musiałoby być tak ściśle tajne jak hasła, zaufanie nie byłoby tak trudne do zdobycia bo ApiKey nie umożliwiałby np skasowania konta. Nieco bardziej złożona wersja zakładałby, że użytkownik miałby opcję dodaj w ApiKeyach która powodowałaby przydzielenie mu kolejnego keya dostępu, nadawałby on mu własną nazwę. Dzięki temu mógłby odciąć dostęp jednej aplikacji a nie wszystkim. Najbardziej wymagająca wersja zakłada, że użytkownik mógłby poszczególnym ApiKeyom nadawać uprawnienia, powiedzmy następujące: odczytywanie pm, wysyłanie pm, wysyłanie dm, wysyłanie statusów, i opcje nie wyłączalną: odczytywanie statusów i dmów.

Inne rozwiązanie niż ApiKey to OAuth. Opisywałem na początku jak to działa. Nie wymagam od BLIPa tego rozwiązania. Minęły by lata świetlne zanim by to wprowadzili. Wspominałem już, że właścicielem BLIPa jest Gadu-Gadu. No to teraz ciekawostka: GG stosuje OAuth :) Nie wierzycie? No to click.

Fajny tekst? Podziel siÄ™ ze znajomymi:
  • Blip
  • Flaker
  • Facebook
  • Twitter
  • Gadu-Gadu Live
  • Google Buzz
  • Google Bookmarks
  • Gwar
  • Wykop
  • PDF
  • RSS
  • Print

Zobacz inne ciekawe wpisy:

Tagi: , ,

Udostepnij
  • @ sproject:
    Owszem ;)
  • Zdaje siÄ™, że kiedyÅ› o tym rozmawialiÅ›my...
  • @ suda:
    No właśnie, mimo wszystko, że GG od dawna stosuje OAuth, ale Api Key w wersji którą najmocniej rozpisałem też nie byłby zły
  • Przy pisaniu eBlipa też siÄ™ zastanawiaÅ‚em nad bezpieczeÅ„stwem tego rozwiÄ…zania. PrzechowujÄ™ tam mail i hasÅ‚o do blipa (gdzie w 90% to hasÅ‚o byÅ‚oby identyczne z mailowym), wiÄ™c nie dziwiÅ‚ mnie brak zaufania userów. OAuth wydaje siÄ™ być najlepszym rozwiÄ…zaniem, niestety Blip wyglÄ…da dziÅ› prawie jak abaddonware, wiÄ™c o implementacji można zapomnieć.
blog comments powered by Disqus
© Kubofonista HomePage. All rights reserved.  
Icons: Sylwia Besz | Design: Theme Junkie.
  • RSS
  • Blip
  • Flaker
  • Twitter
  • Soup.io
  • Facebook
  • GoldenLine
  • NetworkedBlogs
  • Wykop
  • YouTube