Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

Mazinův blog o SharePointu

A zase ten IFRAME!

IFRAME prvek je v HTML dlouho a celou dobu má kontroverzní pověst. Umožnuje dělat užitečné a zajímavé věci, ale současně taky představují způsob, jak realizovat nejrůznější útoky na uživatele. Celé je to o tom, že díky IFRAMU můžete do jednoho okna prohlížeče dostat obsah ze 2 zdrojů. V ideálním případě jsou oba mírumilovné. V horším případě jeden z nich není a obvykle používá ten druhý (mírumilovný) jako zástěrku. Navíc často zneužívá nějaké zranitelnosti prohlížeče tak, aby měl uživatel pocit, že pracuje jen s mírumilovným obsahem. Protože je obsah stránky a obsah IFRAMU zobrazen v jednom okně, sdílejí objektový model a javascriptem mohou navzájem ovlivňovat obsah toho druhého.

Z pohledu bezpečnosti by asi bylo nejlepší IFRAMy zrušit, ale jejich použití je natolik rozšířené, že to nepřipadá v úvahu. SharePoint apps je využívají v tzv. app partech, což není nic jiného než IFRAME. Prohlížeče se proto snaží omezit možnosti míchání obsahu různými restrikcemi jako je např. zobrazením chybové hlášky v situaci, kdy se míchá obsah získaný pomocí HTTPS a HTTP protokolu.

Jedním z posledních útoků, který zneužívá IFRAME je tzv. clickjacking. Ten spočívá v tom, že mateřská stránka obsahuje nebezpečný kód a IFRAME, který zobrazuje něco užitečného, např. SharePoint. IFRAME je dost veliký, takže uživatel má pocit, že kouká na stránku jen a pouze s SharePointem. Podvodný JS “unese” kurzor myši a za uživatele “klikne” na něco, na co by normálně uživatel nekliknul. Existuje i varianta, kdy uživatel má pocit, že kliká na něco užitečného, ale ve skutečnosti kliká na něco jiného (obvykle neviditelného a škodlivého). Blíže se o tomto útoku můžete dočíst na Wikipedii.

Obrana proti tomuto typu útoků je v podstatě dvojí:

  • Pomocí JS na stránce tak, aby nemohla být zneužita v IFRAME – v podstatě aktivní způsob obrany. Problém této metody je v tom, že je jen tak dobrá, jak dobrý použijete obranný skript.
  • Pomocí HTTP hlavičky X-FRAME-OPTIONS – tato metoda zabraňuje zobrazení stránky v IFRAME. Je ale účinná pouze u prohlížečů, které ji podporují (viz. níže).

X-FRAME-ORIGIN může nabývat následujících hodnot:

  • DENY – zakazuje zobrazení v IFRAME
  • SAMEORIGIN – umožnuje zobrazit stránku v IFRAME jiné stránky ze stejného serveru
  • ALLOW-FROM server URL – umožnuje zobrazit stránku v IFRAME nacházejícím se na serveru s daným URL

Tabulka podpory X-FRAME-ORIGIN hlavičky

Prohlížeč DENY/SAMEORIGIN podporován od ALLOW-FROM podporován od
Chrome 4.1.249.1042  
Firefox (Gecko) 3.6.9 (1.9.2.9) 18.0
Internet Explorer 8.0 9.0
Opera 10.50  
Safari 4.0  

Tak jako v mnoha jiných případech je zajímavé, jak různě různé prohlížeče reagují na přítomnost této hlavičky na stránce v IFAME. Zatímco Chrome nezobrazí nic, Internet Explorer zobrazí IFRAME a v něm chybovou hlášku. Podobně různě reagují vnitřně. Obvykle načtou základní stránku (ta, co obsahuje hlavičku X-FRAME-ORIGIN) ale většina z nich díky vícevláknovému zpracování začne okamžitě stahovat i referencované obrázky, CSS a JS. V okamžiku, kdy parser zjistí přítomnost X-FRAME-ORIGIN, aktuální stahování jsou přerušena.

SharePoint tuto hlavičku používá s hodnotou SAMEORIGIN. Vychází se z toho, že SharePoint standardně neběží v IFRAMU, ani k tomu není určen. Nicméně mohou existovat situace, kdy potřebuje nějakou svoji část zobrazit sám v sobě. Proto ta hodnota SAMEORIGIN. Pokud potřebujete z nějakého důvodu, aby SharePoint byl zobrazen v IFRAMU umístěném na stránce jiné domény, musíte mu k tomu pomoci. Slouží k tomu serverový prvek <WebPartPages:AllowFraming runat="server"/>. Pokud je na stránce přítomen, SharePoint negeneruje X-FRAME-ORIGIN mezi hlavičky odpovědi. Můžete ho podle potřeby umístit:

  • na konkrétní stránku
  • do masterpage – pokud chcete ovlivnit všechny stránky odvozené od dané masterpage

Prvek lze přidat i pomocí SharePoint Designeru. Samozřejmě musíte mít před jeho použitím registrovaný prefix:

<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
Zveřejněno 7. března 2015 23:00 by mazin

Komentář

Žádné komentáře
Neregistrovaní uživatele nemužou přidávat komentáře.

About mazin

V občance mám v kolonce jméno uvedeno Jan Vaněk. Věnuji se SharePointu přes 8 let. Hlavně jako architekt, programátor a autor pilotů a prototypů. Rád se totiž šťourám v tom, co má SharePoint "pod kapotou". A když narazím na něco zajímavého, napíšu o tom článek. Kromě toho občas přednáším, publikuju na Codeplexu a odpovídám na StackExchange. Jsem MVP, MCT, MCSD, MCITP, MCDBA a Certified Scrum Master.

Syndication

News

  • Web Developer
  • Enterprise Application Developer

  • Microsoft Office SharePoint Server 2007, Application Development
  • Microsoft Windows SharePoint Services 3.0, Application Development
  • Microsoft Office SharePoint Server 2007, Configuration
  • Microsoft Windows SharePoint Services 3.0, Configuration
  • .Net Framework 2.0, Distributed Applications
  • .Net Framework 2.0, Web Applications
  • .Net Framework 2.0, Windows Applications
Powered by Community Server (Personal Edition), by Telligent Systems
Vyvojar.cz na prodej!