Mass assignment protection

Nie chcę zaśmiecać tematu z WRUGa, więc chciałem dopisać jeszcze jedną rzecz, w związku z tym (poprzednia dyskusja zaczęła się tutaj: http://rubyonrails.pl/forum/p33752-2012-03-05-15%3A09%3A02#p33752)

Przejrzałem jeszcze raz te pierwsze issues, bo coś mi w tym nie pasowało - pamiętam na pewno, że jednym z punktów, które homakov zgłaszał była automatyczna ochrona niektórych atrybutów, co jest moim zdaniem bardzo kiepskim pomysłem i na to na pewno z core teamu nikt by się nie zgodził. I rzeczywiście:

I: https://twitter.com/#!/homakov/status/177495630808236033

Czyli tak naprawdę on nie chciał takiego commita jaki został scommitowany przez @nzkoza. Cóż za ironia, pół internetu go zupełnie nie zrozumiało :wink: Coraz bardziej jest to dla mnie jakiś absurd.

Gratuluję selektywnego cytowania. Homakov napisał że co najmniej klucze relacji powinny być attr_protected domyślnie. Co zresztą było dokładnie wektorem jego ataku.

Oraz tak, oczywiście to że uważa że “zwyczajne” atrybuty tekstowe nie powinny być attr_protected by default czyni dziurę w githubie (i tysiącach innych railsowych aplikacji) niebyłą, a cały jego argument zostaje inwalidowany. Super, rails-core może wrócić do miziania się po pytkach.

(Drogomir, prośba, nie męcz już tej buły, to naprawdę już jest wizerunkowo dawno przegrane przez Railsy i Githuba, a odgrzebując tę sprawę czynisz ją tylko jeszcze bardziej żenującą)

Ok, z mojej strony EOT, ironiczny jest tylko dla mnie fakt, że pół internetu dziękuje mu za feature, którego nie chciał wprowadzić.

Czyli ostatecznie jaki jest zalecany sposób łatania na chwile obecną ? attr_accessible ?

“łatania” - ;( … jeśli wszystko robiłeś jak trzeba to nie ma żadnego łatania, a jeśli nie użyłeś nigdy attr_accessible to byłoby wskazane :slight_smile:

Ja to od lat łatam własnymi generatorami wypluwającymi puste attr_accessible.

Nie trzeba nawet generatorów, wystarczy ActiveRecord::Base.attr_accessible nil

Racja, to nawet lepsze rozwiązanie.

Internet to mu dziękuje za pokazanie że król jest nagi :wink:

Ja się bardzo cieszę że Railsy w coraz większej ilości miejsc stosują politykę “secure by default, insecure when requested”. Zaczęło się od CSRF tokenów w formularzach - wypas! W 3.0 doszło domyślne escape’owanie stringów. Domyślny attr_accessible bardzo pasuje do tego zestawu :slight_smile:

Podejrzewam, Drogomir, że za rok będziemy się śmiać z tego, że bagatelizowaliśmy ten problem.

Sądzę, że cały czas nie widzisz, jaki był cel tej wypowiedzi.

  1. Wszystko działo się dosyć szybko.
  2. Koleś znajduje niegroźną dziurę.
  3. Chce jakieś dziwne zmiany, których core team z naturalnych przyczyn nie może zaakceptować.
  4. Na co Piotrek mu odpisuje, że w tej chwili mogą na pewno dać komentarz, Igor pisze, że (!) to mu wystarczy.
  5. Znajduje poważną dziurę, którą wykorzystuje od razu (w mało niebezpieczny sposób na szczęście), nie powiadamiając już tak jak w przypadku pierwszej.
  6. W świat idzie fama, że on chciał wprowadzić mass assignment protection, a straszny core team się wypiął (gdy część osób np. na czacie railsów dyskutowała, co można z tym zrobić).

Zgadzam się, że wizerunkowo wyszło to z czapy kompletnie, ale nie wynika to z tego, że ludzie od railsów się wypieli i miziali pytkami stwierdzając “ech jednak jesteśmy zajebiści”. Fxn zamykając ticket zrobił faila, fakt, ale też zdecydowanie nie pozostawiono tego bez odzewu. Sposób w jaki Igor wykorzystał znalezioną później, poważną dziurę (nie ujmując mu znaleziska) był tu głównym kołem zamachowym.

I teraz jeszcze bardziej mnie to wnerwia jak widzę, że połowa osób komentujących kompletnie nie zrozumiała problemu, część myśli, że to bug railsów (rozumiany jako bug, który był niezależny od programistów), ale zdissować nagle wszystko sobie można. I ludzie, którzy nawet palcem nie ruszyli, żeby to zmienić, teraz właśnie stwierdzają bez cienia wątpliwości, że to pokazuje, jakie railsy są kiepskie, a core team to banda dupków, która nie przyjmuje krytyki.

Wiele osób, które przechodziły obok i rzuciły kątem oka na sprawę, teraz pluje na ludzi, którzy mają po kilkaset commitów do railsów, stwierdzając jak to wszystko kiepsko rozegrali. Ale kto rozegrał tak naprawdę? Nikt nie myśli o tym, że railsy tworzy tak dużo osób, że ciężko na przestrzeni dnia, czy dwóch, gdy sprawy przybierają obrót bardzo szybko, wystosować jakąkolwiek wspólną pozycję. Wierzę, że Ty byś to rozegrał bezbłędnie, koordynując dyskusją i działaniem ludzi z całego świata, w różnych strefach czasowych, z których prawie nikt nie pracuje nad railsami full time.

Wiem, że sprawy już się nie odwróci i nie ma co próbować, jeśli chodzi o szerszą publikę, ale liczyłem na trochę więcej zrozumienia chociaż u ludzi, którzy siedzą w temacie.

@Sarniak: serio, rozejrzyj się naokoło. Próbujesz bronić pozycji która dawno została przegrana i opuszczona. I przekraczasz granice śmieszności. Jeżeli ktoś wytknięcie błędu projektowego nazywa “pluciem na ludzi”, to powinien przemyśleć czy na pewno chce uprawiać programowanie. Lub dowolną inną inżynierię.*

Tymczasem w świecie node.js, couchdb domyślnie czyni [niektóre] tabele publicznymi:

To jest jakiś dziwny miesiąc :]

    • srsly, dude, bardzo bym chciał żeby moje błędy projektowe czy techniczne były tylko tak poważne jak brak domyślnego attr_protected. to przecież było raptem wadą/brakiem railsów. ale zasadniczego megafaila wykonał github – i nikt tu nie próbuje przerzucać ciężaru odpowiedzialności. natomiast fajnie gdyby framework nie pozwalał na takie nieświadome zjebania, zwłaszcza jeśli już domyślnie pomaga w zabezpieczeniu przed przed CSRF i XSS.

Ależ ty ładnie potrawisz wmanewrować, żeby wyszło na Twoje :>

Zgadzam się z tym, że to błąd projektowy (nigdzie nie pisałem inaczej)!
Zgadzam się, że wytknięcie go jest bardzo pomocne i zapoczątkowało owocną dyskusję!

Co mnie dobija i wnerwia to to, jak sprawa została odebrana, reakcje ludzi na githubie, którzy nie za bardzo wiedzą o co chodzi, duża część bzdurnych komentarzy na reddit, do którego sam linkowałeś, sprowadzanie tego do porażki railsów (gdy otwartych issues jest 800 (!!) i wszystkimi sensownymi trzeba się jakiś sposób zająć, a full time nad railsami pracuje tylko jedna osoba!), to jak to się odbija na ludziach, którzy są naprawdę zaangażowani itd. itp. Dlatego też nie rozumiem Twojego podkręcania tematu.

Może ja piszę w jakimś innym języku, jeśli rzeczywiście to jest to, co widzisz w mojej wypowiedzi.

UPDATE: na temat githuba się nie wypowiadam - dostatecznym failem jest to, że ani testy ani testujący tego nie wyłapali przy tak poważnej aplikacji.

Witaj w internecie :wink:

Tak naprawdę to zabolało najmocniej. I dobrze: pokazało, że nawet najlepszy team railsowy na świecie nie jest odporny.

(i to przy podmianie klucza ssh, japierdziele)

Mam pomysł, w którym może się zgodzimy :wink:

Jak mi przyjdzie do głowy, żeby jeszcze się w takie dyskusje włączać, to może wezmę jedną z tych 800 issues i postaram się coś z nią zrobić ;] Same się nie zamkną ;]

Podoba mi się ten pomysł. Nie wiedziałem że jest ich aż 800!

to tyle? koniec flejma z takim potencjalem? moze jeszcze sie przytulcie geje jedne… ech… panowie, spodziewalem sie po was czegos wiecej ;( a tu jeszcze happy end i naprawianie świata railsów :smiley:

Postawiłem railsy, przeszły wszystkie testy. Potem zepsułem, bo dopisałem failing spec do jednego z issues :stuck_out_tongue:

Jakby ktoś chciał podążyć tą ścieżką - wgryzienie się w railsy nie jest łatwe, więc warto zaczynać właśnie od małych rzeczy - padające testy, poprawki w dokumentacji. Pewnie to, co ja zrobiłem w 3 godziny ktokolwiek z commiterów zrobiłby w 10 minut, ale jakoś trzeba się wdrożyć.

Dla mnie to dobry koniec flejma :stuck_out_tongue:

Ten flejm się skończył jakoś w okolicach wtorku. Drogomir wykonał nekromancję, więc jeszcze trochę się potłukliśmy, ale już chyba więcej się stąd wycisnąć nie da :wink:

A może by tak hakatonik w Wawie “wprowadzenie do hakowania railsów”? Parę osób (Drogomir, patrzę na Ciebie) by na przykładzie kilku issues pokazało jak należy nawigować po kodzie ror i rozwiązywać issues?

o! o! o! świetny pomysł. to jednak tak duży projekt, że człowiek patrzy, nie wie co ma zrobić, żeby aby czegoś nie popsuć i żeby nie było tak - http://youtu.be/rqjobd1q9sg?t=40s :smiley:

Duży, ale myślę, że Piotrek wie:

  1. gdzie najłatwiej zacząć,
  2. czego najbardziej potrzeba,
  3. jakie techniki można zastosować, żeby nie błądzić po omacku (debugger!! - wydaje mi się, że miał o tym mówić, prawda? niby oczywiste, ale nie wiem czy dużo osób tego używa sprawnie).

Nie żebyśmy go właśnie wplątywali w coś na co się jeszcze nie zgodził, ale myślę, że pomysł jest bardzo fajny, o ile czas się znajdzie.