<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IMS Blog - blog o modernom programovaní od Tibor Piňo &#187; Cross-site scripting</title>
	<atom:link href="http://ims.rockretail.com/tag/cross-site-scripting/feed/" rel="self" type="application/rss+xml" />
	<link>http://ims.rockretail.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 18 Feb 2010 10:11:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ochrana proti Cross-site scripting a Cross-Site Request Forgery</title>
		<link>http://ims.rockretail.com/2008/11/29/ochrana-proti-cross-site-scripting-a-cross-site-request-forgery/</link>
		<comments>http://ims.rockretail.com/2008/11/29/ochrana-proti-cross-site-scripting-a-cross-site-request-forgery/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 15:41:59 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Cross-Site Request Forgery]]></category>
		<category><![CDATA[Cross-site scripting]]></category>
		<category><![CDATA[CRSF]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Cross-site scripting a Cross-Site Request Forgery patria medzi najčastejšie útoky na webové aplikácie. V článku si ich v krátkosti predstavíme a navrhneme efektívne riešenie s využitím komponent CakePHP.
Cross-site scripting (XSS)
Zjednodušene povedené sa jedná o typ útoku, kedy útočník vloží do našej aplikácie svoj škodlivý kód. Takýto kód sa najčastejšie vkladá cez neošetrené formulárové prvky alebo [...]]]></description>
			<content:encoded><![CDATA[<p>Cross-site scripting a Cross-Site Request Forgery patria medzi najčastejšie útoky na webové aplikácie. V článku si ich v krátkosti predstavíme a navrhneme efektívne riešenie s využitím komponent CakePHP.<span id="more-53"></span></p>
<h2>Cross-site scripting (XSS)</h2>
<p>Zjednodušene povedené sa jedná o typ útoku, kedy útočník vloží do našej aplikácie svoj škodlivý kód. Takýto kód sa najčastejšie vkladá cez neošetrené formulárové prvky alebo parametre url adresy. Predstavme si situáciu, že máme formulár na vkladanie komentárov k článkom, v ktorom by sme neošetrovali vstup od užívateľa. Určite tušíte, že takýto prístup je veľmi nebezpečný a útočník by mohol cez takýto nezabezpečený formulár vložiť napr. ľubovoľný javascriptový kód a spôsobiť nám tým veľké problémy. Toto bolo len krátke predstavenie problematiky, viac sa môžete dočítať na <a href="http://cs.wikipedia.org/wiki/Cross-site_scripting">wikipedia.org</a> alebo na serveri <a href="http://zdrojak.root.cz/clanky/prehled-utoku-na-webove-aplikace/">www.root.cz</a></p>
<p>My sa poďme pozrieť, ako zabezpečiť našu aplikáciu pred XSS pomocou CakePHP.</p>
<h3>Trieda Sanitize</h3>
<p>CakePHP má priamo implementovanú triedu <a href="http://api.cakephp.org/class_sanitize.html">Sanitize</a> ktorá sa stará o spracovanie formulárových dát od užívateľa a ponúka niekoľko preddefinovaných a veľmi užitočných metód. Predstavme si, že v našich komentároch chceme zakázať zobrazenie akéhokoľvek html tagu a tým úplne zabrániť XSS útoku. Kód by mohol vypadať následovne</p>
<pre><code>// import Sanitize class
App::import('Sanitize');

//display comment
echo Sanitize::html($comment['text']);</code></pre>
<p>Takto môžeme bezpečne zobrazovať komentáre bez obavy pred útokom XSS, pretože všetky html elementy sa nám prevedú na entity. O všetkých možnostiach, ktoré ponúka trieda Sanitize sa môžete dočítať v článku <a href="/articles/2008/10/27/spracovavame-formularove-data">Spracovávame formulárové dáta</a></p>
<h2>Cross-Site Request Forgery (CSRF)</h2>
<p>Jedná sa o typ útoku, kedy sa nám útočník snaží podvrhnúť falošný požiadavok medzi stránkami. Predstavme si situáciu, kedy nám útočník vloží do nášho formulára nasledovný kód</p>
<pre><code>&lt;img src="http://localhost/articles/delete/10000"&gt;</code></pre>
<p>Keby sme nemali nijakým spôsobom ošetrený prístup k akcii <em>delete</em> v controllery <em>articles</em> s najväčšou pravdepodobnosťou by došlo k vymazaniu článku s id 10000. Opäť považujte tento príklad za veľmi zjednodušený, pre bližšie štúdium odkážem na článok na serveri <a href="http://zdrojak.root.cz/clanky/co-je-cross-site-request-forgery-a-jak-se-branit/">www.root.cz</a></p>
<p>My sa poďme pozrieť, ako zabezpečiť našu aplikáciu pred CSRF pomocou CakePHP.</p>
<h3>Security komponenta</h3>
<p>CakePHP nám defaultne ponúka <a href="http://api.cakephp.org/class_security.html">Security komponentu</a> pomocou ktorej môžeme zabezpečiť našu aplikáciu pred CSRF. Táto komponenta ponúka niekoľko preddefinovaných metód, my sa pozrieme na dve z nich a to konkrétne <strong>requireAuth</strong> a <strong>requirePost</strong>. Kód by mohol vypadať následovne</p>
<pre><code>var $components = array('Security');

function beforeFilter()
{
  $this-&gt;Security-&gt;requireAuth('delete', 'add');
  $this-&gt;Security-&gt;requirePost('delete', 'add');
}</code></pre>
<p>Ako môžeme vidieť na kóde vyššie, volaním metódy <strong>requireAuth</strong> si vynútime, že akcie <em>delete</em> a <em>add</em> vyžadujú prihláseného užívateľa a volaním metódy <strong>requirePost</strong> si vynútime, že pre tieto akcie musí byť použitá metóda POST namiesto GET. Tým sme efektívne zabránili, aby fungoval škodlivý kód pomocou požiadavku GET, ktorý sme umiestnili do parametru src v obrázku <strong>src=„http://l­ocalhost/arti­cles/delete/10000“</strong></p>
<p>Musíme však poznamenať, že takáto ochrana proti CSFR nie je úplne 100% a ako sa môžete dočítať v odkazovaných článkoch, CSRF sa dá rozšíriť aj na požiadavky typu POST, ale myslím si, že vyššie uvedený kód je veľmi dobrý základ ako začať s obranou proti CSRF.</p>
<p>Myslím si, že týmto útokom rozhodne treba venovať pozornosť, pretože sú veľmi jednoduché na implementáciu a môžu spôsobiť obrovské škody a poškodiť povesť mnohých webov.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2008/11/29/ochrana-proti-cross-site-scripting-a-cross-site-request-forgery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
