Sep 13 2008
Dlaczego warto przejść na Rails 2.1?
Pora przejść na Ruby On Rails 2.1. We wcześniejszych wersjach odkryto dziurę umożliwiającą SQL Injection. Bug występuje przy parametrze :offset.
Przy użyciu bazy MySqlowej otrzymujemy ActiveRecord::StatementInvalid exceptions z uwagi na domyślne wyłączenie wielokrotnych zapytań przez API. Natomiast przy innych bazach np: PostreSQL lub SQLite niestety może dojść do wstrzyknięcia kodu. Przy zapytaniu
Item.find(:all, :limit=>10, :offset=>params[:offset]
i podaniu jako parametr :offset ciągu: “‘; Drop table items; ” następuje usunięcie tabeli items.
Jeśli koniecznie nie chcemy robić na razie uaktualnienia, a mamy podobne zapytania u siebie najprościej jest rzutować to co podajemy do :offset na Integer (to_i) lub zainstalować odpowiedniech patcha do wersji <2.0 lub do wersji 2.0
.
To, że mysql domyślnie nie pozwala na wielokrotne zapytania z poziomu api na pierwszy rzut oka nie wygląda najlepiej, jednak w tym przypadku chroni to aplikacje przed dużymi problemami.

