Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 4411 сообщений
Cообщения с меткой

веб - Самое интересное в блогах

Следующие 30  »
kiev2376393

Паранойя. Цукерберг заклеил веб-камеру ноутбука

Среда, 29 Июня 2016 г. 17:22 (ссылка)

Основателя Facebook выдал снимок, опубликованный на странице в сети.

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Важные аспекты работы браузера для разработчиков

Воскресенье, 26 Июня 2016 г. 17:00 (ссылка)



Автор: Антон Реймер



Статья основана на вебинаре, который я проводил некоторое время назад. Рассчитана она, в первую очередь на тех, кто не знает, как работают браузеры, или тех, у кого есть пробелы в знаниях. Вероятно, здесь будет много очевидного для тех кто не первый день в веб-разработке. Статью я решил разделить на две части. В первой рассмотрим общие принципы работы браузера. Во второй части я акцентирую внимание на некоторых важных моментах: reflow и repaint, event loop.



Что такое браузер?




Браузер — программа, работающая в операционной системе. Большинство браузеров написано на языке C++. Основное предназначение браузера — воспроизводить контент с веб-ресурсов. В качестве веб-ресурса в большинстве случаев выступает html-страница. Это также может быть pdf-файл, png, jpeg, xml-файлы и другие типы. Среди огромного количества браузеров можно выделить самые популярные: Chrome, Safari, Firefox, Opera и Internet Explorer. Мы рассмотрим браузеры с открытым исходным кодом: Chrome, Firefox, Safari.



Из чего состоит и как работает браузер?






На схеме изображены модули браузера, каждый выполняет собственную функцию. Начнем с пользовательского интерфейса.



Пользовательский интерфейс — то, что видит перед собой пользователь, т. е. адресная строка, элементы навигации, собственное меню и т. д. Несмотря на то что пользовательские интерфейсы очень похожи друг на друга, никакого стандарта, который их описывал бы, не существует. Так исторически сложилось, что браузеры постепенно перенимали интерфейс друг у друга и становились все более похожими.



Механизм браузера отвечает за взаимодействие пользовательского интерфейса и модуля отображения, а также за сохранение данных в памяти.



Модуль отображения. Этот модуль — самый важный для разработчиков. Работа разработчика, в первую очередь, происходит именно с ним, а как можно понять по названию — отвечает он за отображение информации на экране.



Когда мы говорим о браузерных движках, таких как Webkit или Gecko (первый находится «под капотом» у Safari и до 2013 года был у Chrome, второй у Firefox), в первую очередь имеем в виду модуль отображения. Далее мы подробно рассмотрим модуль отображения и более детально разберем, как он работает.



Следующий модуль — сетевые компоненты. Он отвечает за запросы по сети, берет данные с внешних ресурсов и взаимодействует с модулем отображения.



Модуль JS Interpreter отвечает за интерпретацию скрипта, и его выполнение. Существует несколько JS-движков. Самые известные это V8 и JavaScriptCore. Важно не путать движок браузера и JS-движок, который работает в модуле JS Interpreter.



Следующий модуль — исполнительная часть пользовательского интерфейса (UI backend). Она отвечает за отрисовку всего на экране и работу пользовательского интерфейса.



Последний модуль — хранилище данных. Браузеру нужно где-то хранить данные, обычно для этого используется оперативная память. Какие данные нужно хранить? Например, кэш, собственные настройки. Также к хранилищу данных можно отнести indexedDB, который появился в стандарте html5 — собственные базы данных браузера.



Модуль отображения






Модуль отображения получает данные от сетевого модуля. Данные поступают пакетами по 8 Кб. Что важно — модуль отображения не ждет, пока придут все данные, он начинает обрабатывать и выводить их на экран по мере поступления. В случае с html-страницами, он начинает их анализировать, происходит парсинг html (это отдельная большая тема, я на ней останавливаться не буду). Главное, что нужно понимать: в результате парсинга у нас появляется DOM-дерево. Также по окончании парсинга срабатывает событие load, которое можно обрабатывать в скрипте. Это значит, что документ готов и скрипт может с ним работать.



DOM-дерево — document object model. По большому счету, «интерфейс», который предоставляет браузер JS-движку для работы с тем или иным html-документом. На основе DOM-дерева происходит конструирование дерева отображения (render tree). Дерево отображения — тоже важная часть модуля отображения. По большому счету, два этих дерева — DOM-дерево и дерево отображения — наиболее важные элементы для разработчика. Дерево отображения во многом повторяет структуру DOM-дерева (далее будет пример, где это будет представлено нагляднее), но имеет некоторые отличия:




  1. Дерево отображения не содержит скрытых элементов. Если у нас есть html-элемент, у которого прописан display:none, в дереве отображения он присутствовать не будет. При этом, если visibility:hidden, то в дереве отображения он будет. Некоторые DOM-узлы, которые в DOM-дереве представлены как единый узел, в дереве отображения могут быть представлены в виде нескольких. Яркий пример — составной тэг select. Если в DOM-дереве это один узел, в дереве отображение он преобразовывается в минимум три узла. Первый узел отвечает за отображение выбранного элемента. Второй — за выпадающий список с возможными пунктами. И, наконец, третий блок отвечает за стрелочку.

  2. Текст в DOM-дереве представлен как простая node. DOM-дереву нет никакого дела до того, что там написано, сколько строк этот текст занимает. В то время, как для дерева отображения — это важно, и текст трансформируется в несколько узлов, в зависимости от того сколько строк он занимает. Это нагляднее рассмотрим чуть позже.





Дерево отображения служит для того, чтобы браузер понимал, что выводить на экран. Оно содержит информацию о том, из каких блоков состоит страница. Дальше в тексте для простоты я буду называть составные части дерева отображения прямоугольниками, чтобы не путать с html блоками.



Дерево отображения — совокупность прямоугольников, которая должна быть выведена на экране. После того как дерево отображения сконструировано, следует этап компоновки. На этом этапе всем прямоугольникам присваиваются размеры и координаты. Каждый прямоугольник получает свои ширину и высоту, координаты в окне браузера. После компоновки происходит отрисовка дерева отображения. Пользователь видит уже конечный результат. Модуль отображения в каждом браузере устроен по-своему, но схема работы схожая.



Предлагаю рассмотреть два браузерных движка: Webkit и Gecko.





Webkit. Модуль отображения получает html и стили. В результате парсинга html возникает DOM-дерево. В результате парсинга CSS возникает дерево правил таблиц стилей (Style Rules). Далее идет важный этап, который называется Attachment, можно перевести, как «совмещение». На этом этапе CSS-стили накладываются на DOM-дерево, в результате чего появляется Render Tree. После чего происходит компоновка дерева. Называется она здесь Layout. И в завершении происходит отрисовка (Painting).





Если посмотреть на Gecko, можно заметить, что схемы очень похожи. Главные отличия — в терминологии. Здесь тоже парсятся HTML, CSS. В результате чего создается DOM-дерево, которое здесь называется Content Model. Парсятся стили, образуется дерево стилей. Этап Attachment здесь называется Frame Constructor, но, по сути, это тоже самое. В результате совмещения образуется дерево отображения, здесь оно называется Frame Tree. Компоновка здесь называется Reflow. А отрисовка называется Painting, так же, как и в Webkit.



Для простоты приравняем некоторые термины:


  • Attachment = Frame constructor = Совмещение

  • Render Tree = Frame Tree = Дерево отображения

  • Layout= Reflow = Компоновка





Пример








Здесь у нас есть теги:
, 

, есть

и ещё один
”…”/>








Модуль отображения строит DOM-дерево. В данном случае оно будет выглядеть следующим образом. Есть корневой элемент (он всегда присутствует), называется он documentElement и соответствует тегу html. В этом дереве присутствуют все теги. И заметим, что текст представлен, как [text node]. И DOM-дереву больше ничего о тексте знать не нужно. На основе этого DOM-дерева строится Render Tree.



Пример








Дерево отображения. У него также есть корневой элемент (RenderView), но уже можно увидеть отличия между DOM-деревом и деревом отображения. Во-первых, нет тега head, т. к. он не отображается на экране. Нет
, есть только

”…”/>



Текст в дереве отображения разделился на две строки и представляет собой два элемента: line 1 и line2. Как я писал выше, узлы дерева отображения мы будем называть прямоугольниками. Для наглядности я так и отобразил их на иллюстрации.



Пример








Каждый прямоугольник имеет своего «родителя», кроме корневого элемента root.



Модуль отображения также занимается обработкой скриптов.



Порядок обработки скриптов и таблиц стилей




Важно понимать порядок, в котором происходит обработка скриптов. Рассмотрим следующий пример, где я попытался продемонстрировать все возможные способы подключения скриптов и стилей.
















...









Скрипт 1. Первое, что нужно знать про скрипты, — когда при парсинге html анализатор встречает скрипт, он останавливает дальнейший парсинг документа. Т. е., как только анализатор дошел до скрипта 1, браузеру ничего неизвестно о том, что будет дальше. И пока скрипт 1 не выполнится, дальнейший анализ документа происходить не будет.



Но при этом браузер продолжает выполнять ориентировочный синтаксический анализ. Что это значит? Браузер все равно смотрит, что следует за скриптом. Если находятся ссылки на внешние ресурсы, которые нужно скачать и загрузить, он подгрузит эти данные, пока выполняется скрипт 1. Сделано это для оптимизации.



При этом скрипт 3 все равно не будет выполняться, пока не выполнится скрипт 1. К моменту, когда скрипт 1 уже выполнится, скрипт 3 уже может быть полностью загружен. Скрипты можно вставлять в теги head и body. Разница в том, что в скрипте 2, в отличии от скрипта 1, практически весь документ уже будет проанализирован.

У скрипта могут быть атрибуты, такие как deffer и async. Они похожи, но у них есть отличия:




  • Атрибут deffer сообщает браузеру, чтобы тот не ждал окончания выполнения скрипта, а продолжал парсинг html-страницы. При этом скрипт 4 выполнится только после того, как весь html-документ будет проанализирован и построено DOM-дерево.

  • Атрибут async тоже говорит браузеру, что дальнейший html-документ может быть проанализирован, пока скрипт выполняется. Но при этом он выполняется в параллельном потоке, т. е. он на самом деле выполняется асинхронно. Это означает, что он может быть выполнен раньше, чем скрипт1. Если в скрипте 1 у нас 1000 строк, а в скрипте 5 – 10, скрипт 5 вероятно будет выполнен раньше. Т. е. порядок подключения в этом случае не соблюдается.





В случае с defer скрипт 4 всегда выполняется после скрипта 1. С атрибутом async неизвестно, когда он будет выполнен и какая часть документа уже будет проанализирована к этому моменту.



Стили, в отличие от скриптов, никак не могут повлиять на документ. Если скрипты могут добавить дополнительные узлы или теги, то стили этого сделать не могут. Поэтому никакой надобности для браузера блокировать дальнейший анализ документа нет.



При этом есть небольшой нюанс. Например, скрипт 1 может работать с теми или иными стилям, и может потребоваться доступ к ним. Т.е. если мы хотим поменять (или узнать) какие-то стили, но при выполнении скрипта 1 они ещё не подгружены — может случиться ошибка.



Браузеры стараются этот нюанс учесть. Firefox, например, если находит какие-то не подгруженные стили в процессе ориентировочного синтаксического анализа, блокирует выполнение скрипта, подгружает стили, после чего завершает выполнение скрипта. Chrome действует аналогичным образом, но чуть более оптимизировано. Он останавливает скрипт, только если понимает, что в этом скрипте происходит работа с не подгруженными стилями.



Компоновка окон








Окно = Прямоугольник = Узел дерева отображения



Способ компоновки окна определяется следующими факторами:


  • Тип окна (свойство display).

  • Схема позиционирования (свойства position и float).

  • Размеры окна.

  • Внешняя информация (размеры изображения, размер экрана).





Компоновка окон — это этап компоновки дерева отображения. Я думаю многим верстальщикам знакома эта схема, она называется “Box model”. Я не буду подробно на ней останавливаться.



При компоновке окон учитываются следующее факторы:



CSS-свойство display. Два основных типа — inline и block. Другие, такие как inline-block table и прочие, появились уже позже. Отличие в том, что display:block, указывает, что ширина прямоугольника будет вычисляться в зависимости от ширины «родителя». А display:inline указывает, что ширина прямоугольника будет вычисляться в зависимости от его содержимого. Если в элементе два слова, ширина прямоугольника будет равна ширине, необходимой для вывода этих слов. Inline-элементы выстраиваются друг за другом. А блочные элементы — друг под другом.



Следующее, что влияет на компоновку элемента, — свойства position и float. Position по умолчанию static, при этом прямоугольник идет в стандартном потоке компоновки. Также есть position:relative и position:absolute. Position:relative указывает, что прямоугольнику выделяется место в стандартном потоке компоновки. При этом позиция элемента может быть сдвинута относительно этого места: влево, вправо, вверх, вниз с помощью соответствующего свойства.



Абсолютное позиционирование, к которому относится position:absolute и position:fixed, указывает, что элемент выходит за пределы своего прямоугольника из общего потока компоновки. Остальные прямоугольники его не учитывают. Он также не учитывает соседние элементы. Координаты его вычисляются относительно корневого элемента страницы, либо относительно предка, у которого position не static. Размеры же вычисляются тоже относительно родителя. Также на позиционирование влияет свойство float. Оно указывает, что наш прямоугольник идет в стандартном потоке, но при этом занимает либо крайнюю левую, либо крайнюю правую позиции. При этом все остальные прямоугольники «обтекают» этот элемент.



В заключение этой части стоит сказать что, основной поток браузера представляет собой бесконечный цикл, поддерживающий рабочие процессы. Он ожидает отправки событий, таких как reflow и repaint. Эти события ему приходят от модуля отображения. Получив их, он выполняет соответствующие действия.



В Firefox модуль отображения работает в одном потоке. Он един на весь браузер. В Chrome все немного иначе: модуль отображения и поток выполнения у каждой вкладки свои.



Важно, что сетевой модуль работает в отдельных параллельных потоках, которые не связаны с модулем отображения. Следовательно, сетевой компонент может использовать ресурсы независимо от того, что происходит в модуле отображения. Обычно у такого компонента есть возможность работать одновременно с несколькими подключениями и подгружать сразу несколько файлов. В Firefox, например, может быть шесть параллельных потоков, с помощью которых можно подгружать контент, скрипты и т. д.



В следующей части мы детально рассмотрим события reflow и repaint и попытаемся понять как грамотная работа с ними может повысить скорость работы приложения.
Original source: habrahabr.ru.

https://habrahabr.ru/post/304138/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Муся54

Google перестанет обновлять Nexus 5X и Nexus 6P в сентябре 2017 года - Сделать сайт. Студия 8 GN - Разработка сайтов, продвижение web-ресурса

Среда, 22 Июня 2016 г. 23:36 (ссылка)
8gn.ru/novosti-it-industrii...-2017-goda


Сделать сайт, заказ сайтов, интернет-магазина. Разработка сайтов, создание сайта, продвижение web-ресурса (сайт, интернет-магазин)

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Madlen_Russ

Разработка и создание сайта по медицинской теме - Сделать сайт. Студия 8 GN - Разработка сайтов, продвижение web-ресурса

Понедельник, 06 Июня 2016 г. 21:58 (ссылка)
8gn.ru/internet-magazin-saj...nskoj-teme


Сделать сайт, заказ сайтов, интернет-магазина. Разработка сайтов, создание сайта, продвижение web-ресурса (сайт, интернет-магазин)

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Chizz_TecTeP

Веб-камера с эффектами

Понедельник, 06 Июня 2016 г. 17:38 (ссылка)
altercam.com/rus/


http://splitcamera.com/russian/



 

Метки:   Комментарии (3)КомментироватьВ цитатник или сообщество
Art-Krik

Раскрутка и продвижение сайтов | Art-Krik

Воскресенье, 15 Мая 2016 г. 10:04 (ссылка)
art-krik.ru/raskrutka-i-pro...aitov.html


Раскрутка сайта и продвижение сайтов в поисковых системах это самое главное для любой компании

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Project Tofino — новый браузер от Mozilla

Среда, 13 Апреля 2016 г. 12:42 (ссылка)

image

Концепт дизайна и функционала нового браузера. Кликабельно



Компания Mozilla тихо, без лишнего шума, анонсировала в эту пятницу запуск нового проекта — Project Tofino в его собственном блоге на medium, который некоторые уже успели окрестить «убийцей Firefox».



Для подобного мнения есть все основания. Последние годы Firefox стремительно теряет свою долю на рынке, не выдерживая натиска Google Chrome. Project Tofino призван радикально изменить облик браузера от Mozilla и обновить его, тем самым положить начало «возвращению» утраченной доли рынка. Команда Tofino пока состоит всего из шести человек. Именно они и займутся проектированием и дизайном нового продукта компании.



«Со времен Firefox 1.0 браузеры на персональных компьютерах и мобильных устройствах сильно изменились», сказал Марк Майо, старший вице-президент проекта Firefox, «мы давно нуждаемся в свежем взгляде».



Project Torfino отказался от движка Gecko, на базе которого построен Firefox, и обратил свой взгляд на проект Electron, в основе которого лежит Chromium. При этом Mozilla не собирается хоронить «огнелиса» и будет продолжать поддержку и разработку своего старого браузера. Но факт в том, что угнаться за Chrome в своем нынешнем виде Firefox не способен, поэтому и был запущен Project Tofino.



UPD1. Как заметили ниже в комментариях vxd_dev и vedro9, в целом, руководство Mozilla позиционирует Project Tofino как площадку для экспериментов с UI с последующим возвратом на родной для Mozilla движок Geeko, когда дело дойдет до релиза. Сам же Electron на базе Chromium был выбран из-за его комфортности как инструмента для прототипирования.






Каким браузером вы пользуетесь как основным?














































































Проголосовало 414 человек. Воздержалось 30 человек.




Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.





Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/281501/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Art-Krik

Продвижение сайтов в Челябинске | Art-Krik

Воскресенье, 20 Марта 2016 г. 20:54 (ссылка)
art-krik.ru/prodvigenie-saitov.html


Наши услуги по поисковому seo продвижению сайтов в глобальной сети интернет от интернет агентства Art-krik

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Bounty-программа в Badoo

Вторник, 15 Марта 2016 г. 14:42 (ссылка)

imageСегодня у многих IT-компаний есть собственные bounty-программы (или программы по поиску уязвимостей). Badoo — в их числе.



В этой статье я расскажу о том, как мы, не имея отдела информационной безопасности, запустили и ведем свою bounty-программу. Я расскажу о проблемах, с которыми мы столкнулись, как их решали и каким образом пришли к тому, что у нас сейчас есть. И, конечно, упомяну о некоторых интересных багах, присланных участниками этой программы.



Со времени старта нашей bounty-программы прошло три года. Нам до сих пор продолжают присылать сообщения участники со всего мира.



Мы хотим усилить интерес к ней, в том числе со стороны иностранных исследователей. Поэтому мы, во-первых, открыли страничку с нашей программой на крупнейшем портале исследователей hackerone.com, а во-вторых — увеличили суммы вознаграждений за найденные уязвимости! Теперь сумма вознаграждения, в зависимости от категории, начинается от lb100 и может достигать lb1000, сумма супер-премии составляет lb2000 (а это более 200 000 рублей по текущему курсу!) и даже больше, если обнаруженная уязвимость представляет реальную угрозу для наших пользователей.







Badoo — это крупнейший в мире сервис знакомств. Тут можно встретить свою любовь, завести новых друзей или же просто найти собеседников, находящихся поблизости.



На сегодняшний день в Badoo зарегистрировано более 300 миллионов пользователей, которые говорят более чем на 50 языках и живут по всему миру. Работу этой системы поддерживают около 3000 серверов, расположенных в четырех дата-центрах (в Америке, Европе, Азии и России). Наш продукт — это набор приложений для всех популярных мобильных платформ, мобильный веб и веб-версия для десктопного браузера. Мы — highload-проект, и в пиках трафика у нас 70-80 тысяч запросов в секунду.



Очевидно, что система довольно масштабная и требует немало работы по разным направлениям, в том числе и в сфере информационной безопасности.



image



Как это ни странно, у нас нет отдела информационной безопасности. И специалистов, занимающихся исключительно этим направлением, у нас тоже нет.



Тем не менее мы дорожим нашими пользователями и заботимся о безопасности их данных. Несмотря на то, что мы не банк, не система онлайн-платежей и у нас нет возможности вывода средств (но есть зачисление средств, которые переводятся во внутреннюю валюту «кредиты Badoo»), у нас довольно много данных, которые надо защищать.



Масла в огонь подливает и продиктованная бизнесом необходимость не лишать пользователей удобства. Так, например, у нас есть фича, когда в письме пользователю имеется прямая ссылка на доступ к аккаунту без небходимости ввода логина и пароля. Очевидно, что это огромный риск с точки зрения безопасности. Мы стараемся подстраховаться по максимуму, и у нас имеются механизмы защиты данных пользователя даже в этом случае. Но, конечно, никто не идеален.



Почему у нас нет выделенного отдела — сложный вопрос, отвечая на который я бы хотел напомнить, что наш проект вырос из стартапа. А любой стартап изначально нацелен на быстрое развитие и достижение бизнес-целей; он не сильно фокусируется на качестве, безопасности и прочих очевидных для зрелых проектов аспектах. Именно поэтому большинство стартапов задумывается о своем отделе тестирования далеко не с самого начала, а об отделе информацинной безопасности и того позже. И это нормально.



До сих пор в нашей компании применяются некоторые методы и подходы, характерные для стартапа. Информационной безопасностью в целом мы занимались с самого начала (наши ребята — профессионалы своего дела), но вот системного подхода не было. Вероятно, когда-нибудь и мы придем к необходимости в отдельных специалистах или целом отделе, занимающемся информационной безопасностью.



А сегодня мы обеспечиваем безопасность и поддерживаем bounty-программу следующим образом:


  • системные администраторы занимаются инфраструктурной, сетевой и прочей безопасностью. И они начали это делать раньше всех остальных команд;

  • разработчики (в том числе при проведении код-ревью) проверяют код с точки зрения безопасности и возможных ошибок;

  • тестировщики в автотестах и при проверке задач вручную тоже проверяют безопасность фич (например, несанкционированный доступ или инъекции кода);

  • мы регулярно проводим проверки автоматическими инструментами, в частности Skipfish и Acunetix;

  • мы сертифицированы по PCI DSS (у нас первый, самый высокий уровень). В рамках этого стандарта регулярно проводится множество мероприятий по обеспечению безопасности: полная изоляции процесса разработки и выкладки кода и оборудования, обрабатывающего платежи; регулярные тесты на проникновение; регулярные аудиты инфраструктуры и много чего еще. Все эти мероприятия позволили нам не только получить высшую категорию по стандарту, но и удерживать ее вот уже несколько лет;

  • саму систему разработки кода, фреймворк, шаблонизатор, среду эксплуатации и другие вещи мы постарались сделать так, чтобы, во-первых, минимизировать возможность ошибки, а во-вторых — минимизировать последствия возможных ошибок. Самый простой пример: мы пропатчили свой php-fpm так, чтобы он исполнял PHP-код только из определенных директорий (закрытых на запись, разумеется). Таким образом, даже если допустить, что на наши сервера удалось залить сторонний код, мы минимизируем возможность его запуска.





Давным-давно нам, бывало, помогали сторонние специалисты по безопасности. Кого-то мы просили сами, кто-то писал нам о багах по собственной воле и получал за это вознаграждение. Но сам процесс был неорганизованным, поэтому мы решили его систематизировать, упорядочить и поставить на поток.



Пару лет назад мы всерьез задумались о постоянной bounty-программе, тем более что, с одной стороны, это своего рода челлендж, который позволил бы нам выйти на новый уровень, а с другой — независимая проверка, которая помогла бы нам понять, как обстоят наши дела с безопасностью.



Подготовка






Разумеется, мы не стали сразу браться за реализацию, а начали с подготовки и провели несколько внутренних проверок, чтобы повысить уверенность в том, что мы готовы.




  • Убедились, что доступы к базам и другим ресурсам в порядке. Проверили права на запуск, запись и прочие действия для системных пользователей на серверах. Разумеется, работы было проделано немало и многое пришлось переделать, чтобы система стала удовлетворять новым требованиям. В некоторых местах меняли API доступа, чтобы это можно было контролировать.

  • Усилили защиту от XSS-атак для нашей системы шаблонизации. Теперь все стало экранироваться по умолчанию, а не только тогда, когда программист явно это напишет.

  • Провели несколько стадий внутреннего аудита всей системы, кода, окружения.

  • Подготовили инструментарий для обработки заявок пользователей. Мы не хотели сразу запускать большую программу. Для начала решили поэкспериментировать и запустить ее на месяц, поэтому сильно заморачиваться инструментами тоже не стали. В первую очередь мы организовали систему обработки заявок в Google Группах (у нас в компании используется почта Google). С точки зрения кастомизации интерфейс у сервиса довольно гибкий, поэтому многие вещи (принята ли заявка, какая ей присвоена категория, ушла ли она в разработку, заплатили ли за нее деньги) сделать было несложно.

  • Начать программу мы решили с основного веб-сайта, чтобы посмотреть, как она пойдет и насколько будет эффективной.

  • Также было решено провести программу в рускоязычном сегменте сети, поскольку мы, во-первых, уже были знакомы с несколькими сильными исследователями из России, которых попросили поучаствовать, а во-вторых — опасались провала мирового масштаба в случае неудачи.





В интерфейсе корпоративного сайта мы сделали страничку, куда выводились заявки, их статусы и категории. Описание уязвимостей появлялись на этой странице только после того, как уязвимость закрывалась. Новую заявку можно было отправить нам через эту же страницу.







Это оказалось очень удобно: люди получали в письме от нас номер заявки и могли следить за ее состоянием в этом же списке. А еще они могли давать ссылку на эту страницу другим, повышая собственную карму.



В качестве дополнительной мотивации мы сделали рейтинг участников, в котором принималось во внимание не только количество принятых заявок от конкретного участника, но и их критичнось. После окончания месячника мы наградили лидеров рейтинга специальными призами.



Эта страничка также помогала нам указывать участникам на дубликаты. В случае дублирования участник получал уведомление с номером уже принятой заявки. В результате он мог на этой странице отслеживать статус таких заявок.







При оценке багов, найденных участниками, мы не стали опираться на распространенные системы оценок уязвимостей, таких как, к примеру, OWASP. Напротив, мы решили присуждать категорию в зависимости от потенциального ущерба, который уязвимость можно нанести нам и нашим пользователям. Таких категорий мы ввели 5, и в денежном эквиваленте они оценивались в сумму от 50 до 500 фунтов стерлингов.



На первый взгляд, это может показаться странным, но мы руководствовались тем, что зачастую не самая критичная по версии OWASP уязвимость может нанести нам серьезный вред, поэтому ее надо оценивать выше. К тому же мы предусмотрели супер-премию в lb2000 и выше в случае обнаружения особо критичной уязвимости. Так мы решили дополнительно мотивировать наших исследователей не только сообщать об уязвимости, но и придумать для нее максимально эффективный вектор эксплуатации. Далее в статье я приведу пример простой XSS-уязвимости, за которую мы выдали супер-премию из-за необычного и очень интересного вектора атаки.



Конкурс


Итак, «день Д» наступил. Мы запустили программу, анонсировав ее в нескольких источниках, и стали ждать результатов. Напомню, что мы запускали ее всего лишь на месяц. Он был напряженным, но очень полезным для нас. Результаты «месячника безопасности» в Badoo были такими:


  • мы получили около 500 заявок с потенциальными угрозами;

  • около 50 из них оказались дубликатами;

  • примерно 150 заявок были просто багами или пожеланиями к улучшению, не имеющими отношения к безопасности;

  • чуть более 50 были реальными уязвимостями;

  • более половины уязвимостей составили различные CSRF.









Основной процент багов, присланных в течение нескольких дней, составили CSRF. Затронуты были в основном страницы, на которых пользователи заполняли информацию о себе, загружали фото и так далее. Нельзя сказать, что защиты от CSRF-атак на тот момент у нас совсем не было. Многие страницы были защищены сессионным токеном. Тем не менее, как оказалось, не все действия пользователя на сайте были защищены от CSRF-угроз.



Мы отреагировали быстро и уже через несколько дней после старта конкурса запустили большой проект по защите пользовательских данных — анти-CSRF. Все страницы и веб-сервисы мы переделали таким образом, чтобы они стали проверять CSRF-токены по умолчанию. Так мы закрыли практически все CSRF-уязвимости на сайте.



Интересные баги






Топ-3 наиглупейших багов, полученных во время первого «месячника безопасности» выглядели так:


  • В нашем приложении есть «кредиты» — искуственная внутренняя валюта системы, на которую пользователь обменивает реальные деньги, а затем покупает некоторые сервисы. Найденная ошибка была очень глупой и существовавала в системе довольно-таки давно. Если бы не bounty-программа, мы о ней бы еще долго не узнали. Суть заключалась в том, что из-за ошибки в коде, несмотря на все предосторожности, количество кредитов, которые попадут на счет пользователя после оплаты, бралось напрямую из формы. Правка этих значений в html-коде страницы позволяла злоумышленнику, заплатив небольшую сумму денег, положить себе на счет кредитов больше положенного. Мы провели анализ транзакций и выплатили нашедшему эту уязвимость солидное вознаграждение (хотя ею никто, кроме него, не воспользовался).

  • Почти такой же простой была и вторая ошибка. Она заключалась в том, что в одном из обработчиков неверно валидировалось значение параметра, идентефицирующего пользователя при изменении его данных. В результате, поменяв user_id в запросе, можно было менять некоторую информацию других пользователей. Как видите, обе ошибки просты, тем не менее они получили наивысшую оценку.

  • Каким же был третий баг? В Badoo есть возможность привязывать к своему аккаунту аккаунты внешних соцсетей. После этого через них можно авторизоваться во внутреннем аккаунте. Так вот, в механизме привязки была ошибка, которая позволяла привязать свою учетную запись во внешней соцсети к чужому внутреннему аккаунту и, соответственно, получить доступ к чужому профилю.





Что дальше?


За месяц конкурса мы научились реагировать на заявки от участников в течение нескольких часов, починили баги и создали отдельный проект по защите от CSRF-атак. Стало понятно, что эта программа — дело хорошее и нужное. Она полностью оправдала время и ресурсы, затраченные на ее подготовку и реализацию. Поэтому мы решили двигаться дальше и стали готовиться к постоянной программе по поиску уязвимостей в системе безопасности Badoo, немного изменив формат.



В течение месячника мы поняли, как должен выглядеть удобный flow для обработки заявок, и перевели его в JIRA, поскольку трекинг всех задач в нашей компании делается именно в этой системе.



Простой flow в Google Группах выглядел следующим образом:





Заявки от участников попадали к нам двумя путями: через форму на корпоративном сайте и специальный email-адрес. Далее жюри конкурса оценивало заявки и отправляло их (в случае реальных угроз) в разработку конкретным командам. Общаться с участниками на этом этапе нам помогала Developer relations manager, хотя многие письма можно было генерировать автоматически.



Flow в Jira, который мы сделали для постоянной программы, выглядел немного иначе и уже включал в себя автоматические ответы участникам, исключая человеческий фактор.





Также в постоянную программу мы решили добавить и мобильные приложения.



Примерно в то же время мы попали в список bounty-программ Bugcrowd, что принесло нам дополнительную популярность и привлекло внимание исследователей со всего мира. Усилив анонсирование, мы запустили программу.



Результаты постоянной программы


Результаты не были такими же впечатляющими, как после месячника — поток нерелевантных репортов об узявимостях был больше. Тем не менее за первый год работы «большой» программы мы получили сообщения о нескольких интересных багах.


  • Нам прислали около 870 заявок.

  • Около 50 репортов из них были реальными уязвимостями безопасности.

  • Более 30 заявок, присланных за первый год, оказались дубликатами.

  • Более 20 присланных багов были про мобильные приложения.









Как и ожидалось, «шума» стало больше, но и полезных репортов тоже было немало, поэтому результатом программы в целом мы довольны.



Интересные баги


Много интересных багов за первый год нам прислали про мобильные приложения, что, несомненно, приятно. Эта область новая и интересная для разработчиков и исследователей.



Топ-3 багов, найденных за первый год программы:


  • Специальной премии удостоилась уязвимость с очень необычным вектором и не сильно сложная в эксплуатации. У нас во многих местах используется comet-сервер для отправки сообщений разного типа по уже открытым соединениям. Эта технология используется и для показа «карандашика» в мессенджере — стандартной индикации того, что вам прямо сейчас на том конце что-то пишут. И именно в этом типе сообщения было неиспользуемое поле, оставшееся со времен отладки, и в него можно было внести произвольные данные. Эти произвольные данные «как есть» передавались тому пользователю, которому вы пишете сообщение. И там обрабатывались как hml. Налицо нетипичная XSS, content spoofing, DDoS и много других «вкусностей», причем жертве не надо ничего делать — только бы был открыт мессенджер. Именно потому, что такую уязвимость можно было применять массово, мы и присудили специальную премию за нее. Быстрый фикс, как вы понимаете, был простым — неиспользуемое поле просто удалили. А затем перепроверили все подобные моменты в других местах.

  • Вторая интересная ошибка была в мобильном приложении Badoo на платформе Android. Наши разработчики когда-то обнаружили интересный хак: для ускорения рендеринга использовали собственный обработчик через addJavascriptInterface андроидного API на экранах, использующих веб-вью, который почти ничего не делал, кроме инстанцирования. И в случае MitM-атаки (когда вы не можете полностью доверять приходящим клиенту данным) в этот интерфейс мог попасть JavaScript злоумышленника. Таким образом, на девайсах клиентов мог быть исполнен произвольный код.

  • Третий баг (от автора предыдущего бага) заключался в том, что наш собственный загрузчик кеша в Android-приложении недостаточно проверял путь до этого самого кеша. В результате его можно было использовать для получения файлов приложения (ведь загрузчик работает с теми же правами, что и приложение), в том числе и ключи авторизации во внешних системах (например, чтобы авторизоваться через Facebook, «ВКонтакте» и т.д.).





В целом мы считаем, что bounty-программа принесла нам положительный и полезный опыт. Мы ежедневно получаем экспертную оценку наших приложений и сайтов от множества исследователей по всему миру и работаем над улучшением своих продуктов, следя за новостями из области информационной безопасности. Мы высоко ценим доверие наших пользователей и стараемся сделать все, чтобы сохранить безопасность их данных.



Участвуйте в нашей программе, ищите баги на сайтах и в приложениях других компаний. Это очень занимательный процесс, который может не только принести вам положительные эмоции и интересные знания, но и еще и внести существенный вклад в ваш бюджет. Мы платим в фунтах стерлингов, а недавно еще и значительно увеличили суммы премий.



Присылать нам сообщения об уязвимостях или багах лучше всего через платформу Hackerone. Удачного баг-хантинга!



Илья Агеев,

Head of QA, Badoo.



PS: Пока писалась статья, нам в программе на Hackerone сообщили о новых и интересных уязвимостях. О них мы обязательно напишем подробно в следующий раз.

Наши вознаграждения в ленте 'hacktivity'






Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/279325/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kiev2376393

Доктор Веб» обнаружила десятки зараженных игр в Google Play

Воскресенье, 13 Марта 2016 г. 17:56 (ссылка)

Интересует профессиональное создание сайтов в Павловском Посаде? В таком случае настоятельно рекомендуем Вам сотрудничать с ребятами из студии, официальный сайт которой расположен по ссылке reflexit.ru. Профессионалы своего дела будут рады создать для

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Art-Krik

SEO Оптимизация сайта | Art-Krik

Суббота, 05 Марта 2016 г. 10:05 (ссылка)
art-krik.ru/seo-optimizciya-saitov.html


SEO оптимизация сайта это основная составляющая для наилучшего продвижения в поисковых системах

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Совет1

Совет 1 Как выбрать веб камеру

Пятница, 04 Марта 2016 г. 08:35 (ссылка)

Как выбрать веб камеру? Какие же главные её функции и для чего она предназначена?..Далее

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Совет1

Как увеличить размер в фотошопе

Среда, 13 Января 2016 г. 16:32 (ссылка)

Возможности графического редактора AdobePhotoshop воистину безграничны, даже супер профессионалы изучают их годами. Для того чтобы освоить этот программный продукт хотя бы на уровне грамотного пользователя, не надо бояться, начните его изучение с малого. Вы постепенно достигните того уровня, который необходим вам для обработки фотографий и изображений, пусть только для домашнего пользования...Далее

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Перевод] RESTful: Что это на самом деле значит

Понедельник, 11 Января 2016 г. 17:02 (ссылка)






Как оскорбить разработчика via Geek & Poke



Мы в 1cloud занимаемся построением облачного сервиса — наши пользователи могут заказывать у нас виртуальные серверы, и очень часто на них запускаются сайты. Мы уже рассказывали о том, как ускорить загрузку веб-страниц, а сегодня поднимем еще одну интересную тему — каким на самом деле должны быть веб-приложения, чтобы считаться RESTful? Интересный материал на эту тему в блоге образовательного сервиса Recurse Center написала Лорен Лонг (Lauren Long) — мы представляем вашему вниманию адаптированный перевод этой заметки.



Если вы занимаетесь веб-программированием, то наверняка слышали о REST. Многие, такие как я, зачастую делают вид, что знают о нем все, но теряются, когда им задают вопрос, являются ли написанные ими приложения RESTful. «Я использую с html, получается RESTful, правильно?». Настало время раз и навсегда выяснить, что означает этот приятный слуху модный термин. Читать дальше →

http://habrahabr.ru/post/274881/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Диплом_на_заказ_Пишу

Помощь, веб-дизайн, создание и раскрутка сайтов, создание рекламных страниц (landing)

Суббота, 26 Декабря 2015 г. 09:08 (ссылка)
nigma.ru/?s=%D0%BF%D0%BE%D0...0%B2%D0%B5


Помощь, веб-дизайн, создание и раскрутка сайтов, создание рекламных страниц (landing), создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo,

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Совет1

Как настроить микрофон

Четверг, 24 Декабря 2015 г. 04:20 (ссылка)

Микрофон, подключенный к компьютеру, из технологической экзотики постепенно становится едва ли не обязательным компонентом любой компьютерной системы, наряду с аудиоколонками или веб-камерой. Микрофон оказывается необходим не только для записи голоса или таких малораспространенных пока применений, как голосовое управление приложениями, но, в первую очередь, для общения...Далее

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<веб - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda