Hlavní navigace

Reportáž: RailsConf Europe 2008, den druhý

16. 9. 2008 23:09 | Jaroslav Kuboš

Po úspěšném výběru tutorialů první den jsem se vrhl do výběru přednášek druhého dne. Ze sedmi přednášek se mi podařilo vybrat dvě vynikající(ty popíši), dvou dobrých a třech slabších. To ovšem neznamená, že přednášky, které se mi nelíbily, byly špatné. Ty dobré se prostě více trefily do problémů, které v práci řeším a štvou mě.

RESTful Everything (Ingo Weiss)

Přednáška se týkala rozšíření metodiky REST do pohledů, JavaScriptu a CSS. Techniky byly demonstrovány na gemu RestfulViews, který by měl být uvolněn v dubnu příštího roku. Gem by měl řešit dva problémy.

Zaprvé by měl ulehčit tvorbu formulářů a odkazů. Používání form_for a link_to (a jejich parametrů) je totiž poněkud duplicitní.Tak například:

<%= link_to('Edit', edit_task_path(task)) %>

<%= form_for :completion, :url => task_completion_path(task) do |form| %>
  <%= submit_button 'Done' %>
<% end %>

V prvním příkladu s link_to je úplně zbytečné zdůrazňovat, že se má vyrendrovat odkaz – to se dá odvodit z typu akce – v tomto případě „edit“. V druhém příkazu je zase jasné, že se jedná o „new“ a je tedy potřeba vyrendrovat formulář. V tomto směru by měl gem nahradit zápis asi takto:

<%= edit_task(task) %>
<%= create_task(task) %>

Samozřejmě lze voláním předat dodatečné parametry v duchu „Convention over configuration.“ Vedlejším efektem tohoto zápisu je vložení REST tříd do vyrendrovaných elementů. Například:

<a href='...' class='edit task edit_task'>Edit task</a>

Na ty se pak dá krásně odkázat pomocí CSS selektorů. Jak v CSS samotných, tak v JavaScriptu – pomocí knihovy LowPro zmíněné v článku o předchozím dnu. Velmi snadno se tak dá udělat:

  •  ikonka tužky vložená pomocí CSS před každý editační odkaz
  • zapojení otázky „Opravdu chcete smazat tento prvek? [ano-ne]“ pro každý mazací odkaz – ten se pak nemusí specifikovat v každém volání link_to a navíc v HTML nemusí být obsažen Java Script (=nevtíravý JavaScript)

Security on Rails (Jonathan Weiss)

Jednoznačne přednáška s největší účastí…Všichni přítomní si zuřivě dělali poznámky a sténali ve chvílích, kdy se mluvilo o metodě útoku, vůči níž je jejich aplikace nechráněná. Asi nemá cenu, abych rozepisoval všechny metody, dají se najít v prezentaci. Nejprve jsou zmíněny techniky skrytí typu jazyka a webového serveru (standardní soubory – „application.js“, standardní chybové stránky, …). Pak už autor rozebíral jednotlivé útoky – XSS, SQL Injection, … Pro mě byl nový útok „Mass Assignment.“ Ten využije formuláře, na kterém nejsou všechna pole, která jsou v databázi. Problém nastává, pokud se na straně serveru přijatá data uloží pomocí obj.update_attributes, který uloží vše, co je mu podstrčeno. Takže pokud útočník přidá například hodnotu „is_admin=true“ do POST dat editace uživatele, tak se hodnota uloží do databáze – byť v původním formuláři nebyla. Obranou je nastavení attr_protected a attr_accessible v modelu.

Další zajímavostí je například DOS útok pomocí pomalého uploadu/downloadu mnoha souborů, které nezpracovává webový server, ale přímo instance Mongrelu. Ten (všechny instance) se zahltí a nemůže zpracovávat další požadavky, protože na rozdíl od webového serveru nepracuje ve více vláknech.

Závěr

Tak na hlavní stranu Rootu jsem zatím nedostal, ale snad se to tímhle článkem podaří zlomit. A někdo si to konečně přečte a zpraží mě v diskuzi :-) Vždycky jsem si říkal jaké to je – mít pod článkem hromadu negativních komentářů.

A jako obvykle perličku na závěr – tentokrát patří do kategorie černého humoru. Seděl jsem na jedné z přednášek a dělal si poznámky do notebooku. Řečník se dobral posledního slajdu a já jsem sklonil hlavu abych si udělal poslední poznámku. Když jsem ji zvedl, řečník nikde. To už sálem začalo šumět a sbíhali se dobrovolníci, kteří šli řečníka křísit. Za chvíli byl schopen se i posadit, takže soudím, že to přežil. Na otázky už však nedošlo.