<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Cross-site_scripting</id>
		<title>Cross-site scripting - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Cross-site_scripting"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Cross-site_scripting&amp;action=history"/>
		<updated>2026-05-02T00:43:12Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Cross-site_scripting&amp;diff=912328&amp;oldid=prev</id>
		<title>Sysop: + Nový článek...kvůli aktuální chybě InstantCommons</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Cross-site_scripting&amp;diff=912328&amp;oldid=prev"/>
				<updated>2015-06-22T08:56:09Z</updated>
		
		<summary type="html">&lt;p&gt;+ Nový článek...kvůli aktuální chybě InstantCommons&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Cross-site scripting (XSS)''' je metoda narušení [[World Wide Web|WWW]] stránek využitím bezpečnostních chyb ve [[Skriptovací jazyk|skriptech]] (především neošetřené vstupy). Útočník díky těmto chybám v zabezpečení webové aplikace dokáže do stránek podstrčit svůj vlastní [[JavaScript|javascriptový]] kód, což může využít buď pouze k poškození vzhledu stránky, jejímu znefunkčnění, získávání citlivých údajů návštěvníků stránek nebo obcházení bezpečnostních prvků aplikace. Často je též využíván při [[phishing]]u tak, že je skrze XSS zranitelnosti uživateli ukázán jiný obsah na jinak důvěryhodné stránce.&lt;br /&gt;
&lt;br /&gt;
== Ukázky útoku ==&lt;br /&gt;
=== Typ 1 ===&lt;br /&gt;
Většinou se označuje jako '''lokální''' nebo '''DOM based.''' Lze ji využít i na statických stránkách a jde o neošetřené přenesení proměnné z [[Uniform Resource Locator|URL]] adresy do [[javascript]]u.&lt;br /&gt;
Pro ilustraci si představme že máme html stránku s následujícím kódem:&lt;br /&gt;
 &amp;lt;SCRIPT&amp;gt;&lt;br /&gt;
  var pos=document.URL.indexOf(&amp;quot;jmeno=&amp;quot;)+6;&lt;br /&gt;
  document.write(&amp;quot;Ahoj &amp;quot;+document.URL.substring(pos,document.URL.length));&lt;br /&gt;
 &amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;
a na stránku vstoupíme přes standardní odkaz&lt;br /&gt;
 http://[[Uniform Resource Locator|URL]]/stranka.html?jmeno=Alice&lt;br /&gt;
stránka standardně vypíše pouze „Ahoj Alice“. Útočník však může odkaz pozměnit na&lt;br /&gt;
 http://[[Uniform Resource Locator|URL]]/stranka.html?jmeno=&amp;lt;script&amp;gt;alert('Toto je úspěšný XSS útok.');&amp;lt;/script&amp;gt;&lt;br /&gt;
a tím vykoná zákeřný kód.&lt;br /&gt;
&lt;br /&gt;
Tento vektor útoku (stejně jako u typu 2) stojí a padá na přístupu přes upravenou url a většinou je takto i snadno odhalitelný pomocí prosté logiky. Pokud na stránku přijdete přes normální odkaz, tak se zachová tak jak má. &lt;br /&gt;
&lt;br /&gt;
=== Typ 2 ===&lt;br /&gt;
Označuje se jako '''non-persistent''' nebo '''reflected'''. Je postaven na úpravě části URL která se interpretuje do stránky jako její součást, například jako nadpis. Pokud do URL adresy přidáme svůj kód který není před interpretací upraven, tak se stránka v prohlížeči zachová, jako by námi vložený kód byl její součástí. Tato zranitelnost se týká především stránek s generovaným obsahem, pro příklad používáme [[php]] a někde ve zdrojovém kódu máme&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;?php echo $_GET['nadpis']; ?&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
stačí uživateli podstrčit adresu upravenou například takto:&lt;br /&gt;
 http://[[Uniform Resource Locator|URL]]/stranka.php?nadpis=cokoliv&amp;lt;script&amp;gt;alert('Toto je úspěšný XSS útok.');&amp;lt;/script&amp;gt;&lt;br /&gt;
=== Typ 3 ===&lt;br /&gt;
Je označován jako '''persistent''', '''stored''' nebo '''second-order '''protože dojde k přímé a trvalé modifikaci obsahu stránky. Jde o často využívanou možnost, protože na takto napadené stránky nemusíte vstoupit přes upravený odkaz. Vzniká pokud je obsah stránky generován z [[databáze]]. Náš javascript jednoduše vložíme třeba jako součást komentáře - spolu s ním se uloží do databáze a je následně zobrazen všem lidem, kteří si takovýto komentář zobrazí.&lt;br /&gt;
 Ahoj, super &amp;lt;script&amp;gt;alert('Toto je úspěšný XSS útok.')&amp;lt;/script&amp;gt;stránky!&lt;br /&gt;
&lt;br /&gt;
== Obrana ==&lt;br /&gt;
=== Na straně serveru ===&lt;br /&gt;
* Při vkládání dat od uživatele do HTML stránky odfiltrovat „nebezpečné“ znaky z uživatelského vstupu resp. je převést na příslušné [[HyperText Markup Language|HTML]] entity ( &amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt; za &amp;lt;code&amp;gt;&amp;amp;amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt; za &amp;lt;code&amp;gt;&amp;amp;amp;gt;&amp;lt;/code&amp;gt; atd.), na což lze použít ad hoc funkce (např. v jazyce [[PHP]] je to funkce [http://php.net/manual/en/function.htmlspecialchars.php htmlspecialchars]).&lt;br /&gt;
* Pokud se jedná sice o textové parametry, ale z omezené množiny hodnot, lze zvážit indexace této množiny a přenášení pouze číselného indexu, který lze před výstupem (podle možností daného skriptovacího jazyka) implicitně přetypovávat na celé číslo.&lt;br /&gt;
==== Účinný příklad obrany v jazyce PHP ====&lt;br /&gt;
Pokud na stránce využíváme mnoho vstupních parametrů (superglobálních proměnných: $_POST, $_GET, ..), můžeme je ošetřit najednou pomocí následujícího skriptu:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  /*&lt;br /&gt;
    Ošetření vstupních superglobálních proměnných&lt;br /&gt;
  */&lt;br /&gt;
  function htmlspecialcharsRecursive(&amp;amp;$val) {&lt;br /&gt;
    /*&lt;br /&gt;
      Funkce pro rekurzivní ošetření hodnot i klíčů metodou htmlspecialchars      &lt;br /&gt;
      *&amp;amp;$val reference na hodnotu&lt;br /&gt;
    */&lt;br /&gt;
    if(is_array($val)) {  //zjistí zda $val je pole&lt;br /&gt;
      $keys = array_keys($val);   //načte všechny klíče tohoto pole&lt;br /&gt;
      foreach($keys As $key) {  //projde celé pole&lt;br /&gt;
        $value = htmlspecialcharsRecursive($val[$key]); //pokračuje v rekurzi&lt;br /&gt;
        unset($val[$key]); //smaže původní klíč&lt;br /&gt;
        $val[htmlspecialchars($key)] = $value; //vytvoří prvek s ošetřeným klíčem i hodnotou v původním poli                 &lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else  &lt;br /&gt;
      $val = htmlspecialchars($val);  //pokud $val není pole pouze ošetří hodnotu    &lt;br /&gt;
    &lt;br /&gt;
    return $val; // vrací $val, nutné pro rekurzi&lt;br /&gt;
  }   &lt;br /&gt;
&lt;br /&gt;
  function fixSuperglobals() {&lt;br /&gt;
    /*&lt;br /&gt;
      Ošetří superglobální proměnné proti XSS&lt;br /&gt;
    */&lt;br /&gt;
    $superglobals = array(&amp;amp;$_GET, &amp;amp;$_POST, &amp;amp;$_COOKIE, &amp;amp;$_REQUEST);  //pole vstupních superglobálních proměnných&lt;br /&gt;
    foreach ($superglobals As &amp;amp;$process) {  //projde pole  &lt;br /&gt;
      htmlspecialcharsRecursive($process);  //provede rekurzivní ošetření&lt;br /&gt;
    }&lt;br /&gt;
    //odstranění zbytečných proměnných&lt;br /&gt;
    unset($process);  &lt;br /&gt;
    unset($superglobals);&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  fixSuperglobals();   //zavoláme funkci, která nám ošetří všechny vstupní superglobální proměnné&lt;br /&gt;
  &lt;br /&gt;
  /*&lt;br /&gt;
    Nyní jsou superglobální proměnné ošetřené proti Cross-site scripting.  &lt;br /&gt;
  */&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
Tento skript nám ošetří PHP kód proti '''Cross-site scripting (XSS)''' útokům. Pokud pracujeme ještě s databází, je nutné ošetřit skript také proti [[SQL injection]]!&lt;br /&gt;
&lt;br /&gt;
=== Na straně uživatele ===&lt;br /&gt;
Na straně uživatele vpodstatě obrana neexistuje. Lze sice vypnout [[JavaScript]] ovšem mnoho stránek tím prakticky znefunkčníne a drtivá většina prohlížečů ji má zapnuto. Je třeba si ale uvědomit, že o zamezení možnosti cross-site scriptingu by se měl postarat skript na straně serveru.&lt;br /&gt;
&lt;br /&gt;
== Související články ==&lt;br /&gt;
* [[SQL injection]] – podobný druh útoku na WWW aplikaci přes neošetřené vstupy&lt;br /&gt;
* [[Cross-Site Request Forgery]]&lt;br /&gt;
&lt;br /&gt;
== Externí odkazy ==&lt;br /&gt;
* [http://www.cgisecurity.com/articles/xss-faq.shtml The Cross-site Scripting FAQ]&lt;br /&gt;
* [http://www.owasp.org/index.php/Cross-site_Scripting_(XSS) OWASP – Cross-site Scripting (XSS)]&lt;br /&gt;
* [http://ha.ckers.org/xss.html Přehledný seznam většiny použitelných XSS scriptů]&lt;br /&gt;
* [http://www.phpguru.cz/clanky/cross-site-scripting Podrobný článek o XSS a obraně proti němu v PHP]&lt;br /&gt;
* [http://www.soom.cz/index.php?name=articles/show&amp;amp;aid=485&amp;amp;title=Pokrocile-techniky-XSS Obsáhlý článek věnovaný XSS]&lt;br /&gt;
* [http://www.soom.cz/index.php?name=articles/show&amp;amp;aid=574&amp;amp;title=Pravni-aspekty-XSS-utoku Právní aspekty XSS útoků]&lt;br /&gt;
* [http://www.soom.cz/data/Cross-Site_Scripting_v_praxi__Roman_Kummel.pdf Cross-site Scripting v praxi - zranitelnost]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flickr|Cross-site+scripting}}{{Článek z Wikipedie}}&lt;br /&gt;
[[Kategorie:Počítačové útoky]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>