No wlasnie. Mam formularz ktory w polach tekstowych wysyła rozne dane. Zastanawiam sie jak mozna łatwo zabezpieczyć sie przed zapisywaniem htmlowych i inny ch znaczników. Tak zeby nie dało sie “wpisywać kodu”. Probowalem pluginu white_list ale cos nie działało mi 
Szczerze mówiąc to zawsze jest problem (Ci którzy twierdzą, że tak nie jest mylą się ;)). Najprostsze rozwiązanie to traktować to co wpisze user jako tekst, a w szablonie używać metody h(), która wyeskejpuje dane:
<%=h "<h1>Nagłówek</h1>" %>
Kojarzę też, że railsy dostarczają jakiś helper do usuwania niechcianych tagów, ale wiem że do wersji 2.x nie była to w 100% bezpieczna metoda.
Najbezpieczniejsza metoda to użycie jakiegoś parsera (x)html/xml.
Możesz przyglądnąć się jak to robią w instiki: http://instiki.rubyforge.org/svn/instiki/trunk/lib/sanitize.rb (metoda sanitize_html).
to tak mam z tymi ‘h’ myślałem moze, ze jest cos konkretnieszego ale prostego w implementacji
a będac przy tematyce bezpieczeństwa , bo nie chce zakladac nowego wątku, mama pytanie odnosnie adresu. bo jezeli mam cos takiego:
railsapp/fotki/list
to widomo poki zamiast ‘list’ wpisujemy nazwy istniejacych akcji to wlaczają sie odpowiednio. Gdy jednak wpiszemy cos co nieistnieje otrzymujemy biała strone “Unknown action…” . Da sie jakoś zrobić żeby zamiast białej strony wlaczala sie np. jakas istnirjaca wybrana akcja?
btw: w jednym z kontrolerow, który wygenerowalem scafoldem utworzyło mi sie cos takiego:
# GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
verify :method => :post, :only => [ :destroy, :create, :update ],
:redirect_to => { :action => :list }
nie wiem do czego to jest… i zastanawiam sie czyczasem nie jest to powiazane z tym moim pytaniem ??
W railsach >2.0 jest dużo lepiej niż kiedyś. Ogólnie używasz wspomnianej wyżej metody h(), która zamieni <> i inne znaki htmla na encje.
Jeżeli chcesz dać użytkownikom możliwość wpisania części tagów możesz użyć metody sanitize. W railsach 2.0 jest używana biała lista, czyli wpisujesz tylko te tagi i atrybuty, które dopuszczasz - jest to dużo prostsze od wypisania wcześniej w railsach czarnej listy. W environment.rb można ustawić dopuszczane tagi:
config.action_view.sanitized_allowed_tags = 'strong', 'b', 'i', 'table', 'tr', 'div'
config.action_view.sanitized_allowed_attributes = 'id', 'class', 'style', 'href'
config.action_view.sanitized_allowed_css_properties = 'align', 'color', 'font-face'
Dodatkowo warto używać pluginu safe_erb.
[quote=fredman]btw: w jednym z kontrolerow, który wygenerowalem scafoldem utworzyło mi sie cos takiego:
# GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
verify :method => :post, :only => [ :destroy, :create, :update ],
:redirect_to => { :action => :list }
nie wiem do czego to jest… i zastanawiam sie czyczasem nie jest to powiazane z tym moim pytaniem ??[/quote]
Oznacza to że żądanie http post może wywołać tylko metody wymienione w nawiasach []. W tych nawiasach wymienione są metody, które zmieniają stan zasobów na serwerze(w uproszczeniu tworzą, zmieniają i kasują dane). Związane jest to z dobrą praktyką programistyczną, a przede wszystkim intencjami twórców HTTP. Dodatkową zaletą jest to, że próbując wrócić do poprzedniej strony po wysłaniu formularza metodą post dostajemy ostrzeżenie i w konkretnym przypadku np. nie zapłacimy 2X za tą samą rzecz wysyłając ten sam formularz.
Ogólna zasada:
GET- pobieranie
POST- tworzenie, modyfikacja, usuwanie
Ideologia REST idzie jeszcze dalej dodając dodatkowe metody(PUT,DELETE), ale to już zupełnie inna historia 
Odwrotnie: dla podanych akcji w tablicy można użyć tylko podanej metody (tu POST).
[code=ruby]class TestController < ApplicationController
verify :method => :post, :only => :action1
def action1
render :text => “action1”
end
def action2
render :text => “action2”
end
end[/code]
Akcję “action2” możesz wywołać sobie zarówno GET jak i POST.
[quote]a będac przy tematyce bezpieczeństwa , bo nie chce zakladac nowego wątku, mama pytanie odnosnie adresu. bo jezeli mam cos takiego:
railsapp/fotki/list
to widomo poki zamiast ‘list’ wpisujemy nazwy istniejacych akcji to wlaczają sie odpowiednio. Gdy jednak wpiszemy cos co nieistnieje otrzymujemy biała strone “Unknown action…” . Da sie jakoś zrobić żeby zamiast białej strony wlaczala sie np. jakas istnirjaca wybrana akcja?[/quote]
Wyjątek możesz przechwycić i zrobić co tam chcesz (np. wyświetlić stronę 404).
Możesz też spróbować taki trick:
class TestController < ApplicationController
def method_missing(name, *args)
render :text => "missing"
end
end
Możesz też pobawić się z routes. Możliwości jest wiele.
[quote]btw: w jednym z kontrolerow, który wygenerowalem scafoldem utworzyło mi sie cos takiego:
# GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
verify :method => :post, :only => [ :destroy, :create, :update ],
:redirect_to => { :action => :list }
nie wiem do czego to jest… i zastanawiam sie czyczasem nie jest to powiazane z tym moim pytaniem ??[/quote]
Nie jest. Piachoo Ci już wytłumaczył.
[quote=radarek]class TestController < ApplicationController
def method_missing(name, *args)
render :text => "missing"
end
end
Możesz też pobawić się z routes. Możliwości jest wiele.[/quote]
O! to jest super! wsadzilem sobie to do application.rb i dodalem jeszcze wyswietlanie w layoucie tylko jest mały problem jeszcze:
działa jesli jesli w adresie jest wpisany controler, czyli tak jak tu:
railsapp/fotki/list
ale jeśli nie ma kontrolera czyli tak:
railsapp/
to po wpisaniu głupot w dalszej czesci, wypluwa error, tylko ze tym razem “Routing error” 
EDIT: oko udało sie załtwić tez to pierwsze przez dodanie do routes.rb czegos takiego:
map.connect "*anything" , :controller => "kontroler", :action => "akcja"