<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Unikanie niebezpiecznych danych w szablonach RHTML</title>
    <link>http://blog.zabiello.com/articles/2006/12/25/unikanie-niebezpiecznych-danych-w-szablonach-rhtml</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Unikanie niebezpiecznych danych w szablonach RHTML</title>
      <description>&lt;p&gt;W wypadku tre&#347;ci wy&#347;wietlanych w  szablonach najlepiej zachowa&#263; zasad&#281; ograniczonego zaufania. Np. je&#347;li wy&#347;wietlamy zawarto&#347;&#263; komentarzy kt&#243;re kto&#347; wys&#322;a&#322; z formularza, to przy odrobinie z&#322;o&#347;liwo&#347;ci i/lub g&#322;upoty taki u&#380;yszkodnik mo&#380;e nam wys&#322;a&#263; kod &lt;span class="caps"&gt;HTML&lt;/span&gt; lub JavaScript, kt&#243;ry popsuje sp&#243;jno&#347;&#263; naszej strony. Generalnie istnieje kilka metod aby si&#281; przed tym zabezpieczy&#263;.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Wszelkie tre&#347;ci podejrzane o mo&#380;liwo&#347;&#263; wys&#322;ania kodu &lt;span class="caps"&gt;HTML&lt;/span&gt; wy&#347;wietlaj przez funkcj&#281; filtruj&#261;c&#261; html_escape() (lub w skr&#243;cie: h) Czyli  zamiast &amp;lt;&lt;span&gt;= jakies_dane %&amp;gt; nale&#380;y u&#380;ywa&#263; &amp;lt;&lt;/span&gt;=h jakies_dane %&amp;gt; i dobrze aby ten zwyczaj wszed&#322; nam w krew. Dzi&#281;ki temu helperowi wszelkie dane zawieraj&#261;ce znaczniki zostan&#261; wymienione na encje &lt;span class="caps"&gt;HTML&lt;/span&gt; (np. zamiast &amp;lt; b&#281;dzie &amp;amp;lt; co w efekcie uniemo&#380;liwi interpretacj&#281; takich znak&#243;w jako tag&#243;w &lt;span class="caps"&gt;HTML&lt;/span&gt;)]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;W wypadku kiedy potrzebujemy kodu &lt;span class="caps"&gt;HTML&lt;/span&gt;, ale nie chcemy aby zawiera&#322; ukryte wstawki w j&#281;zyku JavaScript, dane filtrujemy przez funkcj&#281; sanitize(). Wszystkie akcje onXXX oraz linki zaczynaj&#261;ce si&#281; od javascript: powinny zosta&#263; usuni&#281;te.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;W wypadku kiedy chcemy udost&#281;pni&#263; u&#380;yszkodnikom  mo&#380;liwo&#347;&#263; wprowadzania tre&#347;ci z mo&#380;liwo&#347;ci&#261; formatowania tekstu, zamiast &lt;span class="caps"&gt;HTML&lt;/span&gt; mo&#380;na udost&#281;pni&#263; im mo&#380;liwo&#347;&#263; wprowadzania tekstu w formacie Markdown (&lt;a href="http://www.deveiate.org/projects/BlueCloth"&gt;BlueCloth&lt;/a&gt;) lub Textile (&lt;a href="http://www.whytheluckystiff.net/ruby/redcloth/"&gt;RedCloth&lt;/a&gt;).  To specjalny, uproszczony spos&#243;b formatowania tekstu, kt&#243;ry jest zamieniany na bezpieczny i dobrze sformu&#322;owany kod &lt;span class="caps"&gt;HTML&lt;/span&gt;. Rails posiada wbudowane helpery do ich obs&#322;ugi (s&#261; zdefiniowane w module ActionView::Helpers::TextHelper)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Ostatecznie mo&#380;na  wyci&#261;&#263; wszystkie znaczniki &lt;span class="caps"&gt;HTML&lt;/span&gt; za pomoc&#261; helpera strip_tags().&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Aby Rails m&#243;g&#322; u&#380;ywa&#263; helpery textilize() i markdown() trzeba je doinstalowa&#263;&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;gem&lt;/span&gt; &lt;span class="ident"&gt;install&lt;/span&gt; &lt;span class="constant"&gt;RedCloth&lt;/span&gt;
&lt;span class="ident"&gt;gem&lt;/span&gt; &lt;span class="ident"&gt;install&lt;/span&gt; &lt;span class="constant"&gt;BlueCloth&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Nast&#281;pnie w pliku config/environment.rb doda&#263; kod:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="ident"&gt;require_gem&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;RedCloth&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; 
  &lt;span class="ident"&gt;require_gem&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;BlueCloth&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Przyk&#322;ad u&#380;ycia:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_rhtml "&gt;&amp;lt;%= textilize '&amp;quot;Polskie forum&amp;quot;:http://forum.rubyonrails.pl dla RoR.' %&amp;gt;
&amp;lt;%= markdown 'Strona Rubiego [po polsku](http://ruby-lang.org/pl).' %&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Wygenerowany kod &lt;span class="caps"&gt;HTML&lt;/span&gt;:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_rhtml "&gt;&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://forum.rubyonrails.pl&amp;quot;&amp;gt;Polskie forum&amp;lt;/a&amp;gt; dla RoR.&amp;lt;/p&amp;gt; 
&amp;lt;p&amp;gt;Strona Rubiego &amp;lt;a href=&amp;quot;http://ruby-lang.org/pl&amp;quot;&amp;gt;po polsku&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 25 Dec 2006 01:14:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ab598372-bbec-4b6f-98b6-54cd7f04a01e</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2006/12/25/unikanie-niebezpiecznych-danych-w-szablonach-rhtml</link>
      <category>Ruby on Rails</category>
      <category>rails</category>
    </item>
    <item>
      <title>"Unikanie niebezpiecznych danych w szablonach RHTML" by Drogomir</title>
      <description>Dobrze, &#380;e poruszy&#322;e&#347; ten temat &amp;#8211; rzadko m&#243;wi si&#281; o bezpiecze&#324;stwie w aplikacjach webowych (albo notorycznie omijam artyku&#322;y na ten temat ;). Ja bym do tego jeszcze doda&#322;, &#380;e nale&#380;y uwa&#380;a&#263; nie tylko na to co wy&#347;wietlamy, ale te&#380; na dane, kt&#243;re dostajemy &amp;#8211; na szcz&#281;&#347;cie w railsach jest:
&lt;pre&gt;&lt;code&gt;:conditions =&amp;gt; [&amp;quot;column = ?&amp;quot;, value]&lt;/code&gt;&lt;/pre&gt;
ale nie ka&#380;dy o tym wie.</description>
      <pubDate>Mon, 25 Dec 2006 02:36:02 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a0aed26a-3dfe-4ef8-ba60-c21d2f52f29a</guid>
      <link>http://blog.zabiello.com/articles/2006/12/25/unikanie-niebezpiecznych-danych-w-szablonach-rhtml#comment-341</link>
    </item>
  </channel>
</rss>
