HTML5 защитен обектив

Съдържанието на статията

HTML5 е бъдещият стандарт за език за маркиране в Интернет. Той все още е в чернова фаза, но все повече и повече от функциите му се внедряват в популярните уеб браузъри. Но както обикновено се случва, новите технологии носят и нови опасности, които могат да бъдат успешно използвани.

HTML5: кратко резюме

Други екстри, които HTML5 предлага, включват:

  • „Офлайн“ съхранение на данни в браузъра – уеб хранилище, локални бази данни;
  • Canvas 2D API
  • Междудомейн взаимодействие (Cross Domain Messaging);
  • Функционалност "плъзгане и пускане";
  • Работа с мрежа чрез уеб сокети;
  • Определяне на местоположението (Геолокация).

Уеб съхранението е мощна алтернатива на бисквитките

  • localStorage - за дългосрочно съхранение на данни;
  • sessionStorage - за използване на сесии.

Механизмът се поддържа от почти всички уеб браузъри: Firefox 3.5, Safari 4.0, IE8, Google Chrome, Opera 10.50. По-долу е типичен пример за използване на локално уеб хранилище за проследяване на посетители на уеб страница.

Прегледахте тази страница няколко пъти.

Нека да разгледаме защитната страна на тази технология. Подобно на много неща в JS, API в HTML5 се подчинява на механизма за произход на HTML5, което означава, че данните са достъпни за всички страници в същия домейн, като се вземат предвид протоколът и номерът на порт (например example.com:80). Както беше отбелязано по-горе, уеб хранилището е освободено от ограничението 4KB и спецификацията препоръчва 5MB на домейн. Всъщност Firefox, Safari, Opera, Google Chrome имат ограничение от 5 MB, а IE има ограничение от 10 MB. Но най-интересното не е вквота, но в това как браузърът ги използва.

Например Firefox има ограничение за домейна от трето ниво .example.com. По този начин (и тук внимание!) един поддомейн може напълно да заеме мястото, отредено за домейна:

// Firefox 3.6.8 за (променлива i = 0; i

Не и без вездесъщия нулев байт. В този уеб браузър вмъкването на нулев байт в ключа localStorage кара Firefox да „забрави“. С други думи, мястото, макар и само в 1B, е заето, но уеб браузърът не го взема предвид. „Дребно, но хубаво“ (c).

Продължавай. Google Chrome се опитва да бъде по-строг по отношение на ограниченията на домейна и целият домейн се взема предвид при изчисляването на лимита. Но в същото време в Google Chrome можете да заемете *цялото* дисково пространство, като създадете куп iframe в домейн със заместващи символи, в който можете да заемете 5MB всеки!

Тази грешка все още не е коригирана. Освен всичко друго, стари проблеми са мигрирали от бисквитки към нов вид хранилище , включително:

  • проследяване на потребителите;
  • DNS спуфинг атаки.

Поради естеството на ограничението за достъп (протокол+домейн+порт) също имаме проблеми при хостинги, използващи системата example.com/

user/, което между другото не беше казано с бисквитки. Да, отдавна не сме виждали такъв хостинг в живота, но изведнъж!

SQL инжекция в уеб браузър

Тъй като говорим за съхранение на данни, нека си припомним още по-усъвършенстван инструмент - уеб SQL база данни направо в браузъра! Нека да е SQLite, но това вече е добро! Няма да разглеждаме подробно доста специфичния синтаксис за запитване към базата данни, а по-скоро незабавно да разгледаме следния код, който трябва просто да показва информация за книгата чрез нейния ID:

функция showById() var pos =document.URL.indexOf("book=")+5; var книга > varauthor = ''; var title = ''; db.transaction(function(tx) tx.executeSql("SELECT * FROM books WHERE > if ( result.rows.length > 0)

Или ето още един финт, въпреки че досега работи само в най-новите версии на Opera:

Нови видове полета за формуляри

Това, което е важно от гледна точка на сигурността е, че полетата ще сами се валидират!

Валидиране на данните от формуляра

Съобщения между документи

От съображения за сигурност уеб браузърите ограничават взаимодействието (достъп и обмен на данни) на клиентските части на уеб приложенията, хоствани в различни домейни. Въпреки факта, че ограничението изглежда наистина необходимо от гледна точка на сигурността, комуникацията между документи в някои случаи често е необходима. Например, това може да е вярно за widget технологиите. Системата за обмен на съобщения между документи позволява (в идеалния случай) сигурен начин за обмен на данни между документи, хоствани в различни домейни, и се поддържа поне от Firefox, Google Chrome. Нека разгледаме как работи този механизъм. Нека сайтът (или по-скоро неговата клиентска част ) example.com/index.html иска да взаимодейства с foo.com/iframe.html, , който е зареден в iframe. В този случай foo.com инициализира "получателя" на съобщенията. Код на получателя на съобщение на foo.com:

Обърнете внимание на изричната проверка на подателя (e.origin). Но дори и с такава проверка, не трябва да забравяте да потвърдите входящите данни в случай, че доверен подател изведнъж се появи, да речем, XSS. И в документа (клиентска част ) a.example.com изпращаме съобщение до получателя:

функция postMsg() var o = document.getElementById('ifra'); o.contentWindow.postMessage(document.getElementById('msg').value, 'http://foo.com/'); връща невярно; >

Определяне на местоположението

Текущото местоположение е доста важен аспект на поверителността („поверителност“), така че е необходимо да се прилагат механизмите за определянето му с голямо внимание. Този аспект е описан в раздела „Съображения за сигурност и поверителност“ на спецификацията на W3C. Накратко, спецификацията гласи, че локацията трябва да бъде изрично разрешена от посетителя на сайта. Технически това се реализира чрез извикване на специален метод на обекта navigator.geolocation:

if (navigator.geolocation) navigator.geolocation.getCurrentPosition( function(position) var lat = position.coords.latitude; var lng = position.coords.longitude; var options =

var marker = нов google.maps.Marker(опции); marker.setMap(карта); >); >

Във всички популярни браузъри (с изключение на MS Internet Explorer, който просто не внедрява Geolocation API), при посещение на страница, която използва геолокация, се показва предупреждение за събиране на информация и потребителят се иска разрешение. В същото време е възможно да запомните вашия избор и / или да поставите сайта в бял или черен списък. Важно е това да вземе предвид домейна на сайта, без да включва пълния път до скрипта ...

„Нито Mozilla, нито Google никога няма да използват информацията, събрана от Google Location Services, за да ви идентифицират и никога няма да шпионират вашите s.“

Но знаем, че на никого не може да се вярва! 🙂 Трябва също така да обърнете внимание на неприятните последици, които XSS ще доведе до сайт, на който е разрешено да събира координати.

Накрая

искам даНадявам се, че трудно спечелените разработчици на уеб приложения не само ще се втурнат да внедрят всички наистина интересни и необходими функции на HTML5, но и ще проучат разделите "Сигурност" на съответните спецификации. Радваме се, че различни инструменти за пентестери са в крак с напредъка, включително W3AF, който е мощна и безплатна рамка за одит на сигурността на уеб приложенията. Вашият покорен слуга е един от сътрудниците на този проект и ние вече добавихме модули за намиране на WebStorage употреби и други рискови части от кода. Така че по време на следващия одит на сигурността на сайта можете да определите дали там се използват HTML5 чипове :).