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ě.
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:
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.
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.
Jaroslav Kuboš vystudoval informatiku na FIT VUT v Brně, pracuje v IT a ve volném čase tvoří inovativní server s nabídkami IT práce – nalezen.cz