в предыдущей статье было рассказано о php-инъекции. теперь настала очередь разобраться с xss, с помощью которой, при определённых обстоятельствах, можно даже украсть и использовать куки администратора. а имея административный доступ с сайтом, как правило, можно сделать практически всё, что угодно.
xss
после успешного написания гостевой книги или даже простенького чата может захотеться чего-то большего, помимо простой отправки сообщений. но так ли безопасно то, что уже имеется? пользователи отправляют сообщения друг-другу и все довольны, но обязательно найдётся кто-то, знакомый с html, решивший шутки ради выделить текст своего сообщения жирным. простейшее сообщение:
<b>Всем привет!</b>
возымеет эффект бомбы: все начнут общаться также, пока не появится юзер с недобрыми намерениями и таким сообщением:
<script>alert('Ты дурак!');</script>
теперь после каждой перезагрузки странички все пользователи будут получать обидное сообщение в выпрыгивающем диалоге.
и здесь всё дело в недостаточной фильтрации данных. только если в примере с php-инъекцией дело спасала предварительная обработка данных, здесь будет более уместно пост-экранирование. т. е. строка перед выводом в браузер должна обрабатываться специальной функцией, препятствующей возможности отсылать теги. имя этой функции — htmlspecialchars.
при обработке следующие символы: & < > " заменяются на их эквиваленты (мнемоники): & < > " и уже в браузере предстают перед пользователем в своём первозданном виде.
конечно, можно обработать строку и перед добавлением в базу, вырезав из неё все недопустимые теги. но на данной момент 100% способа нет. как встроенные функции по вырезанию тегов, так и написанные кем-то всё-равно можно обойти, подобрав такую конструкцию-нагромождение, что парсеры благополучно пропустят то, что нужно злоумышленнику. в самом плачевном состоянии находятся функции, работающие по парным (открывающему и закрывающему) тегам: если кто-то «забудет» закрыть тег, делающий текст жирным, такой парсер это пропустит.
но если пользователям хочется дать возможность использовать разные украшательства, какой же выход? лучший выход — вообще запретить пользователям использовать html-теги, и вместо них «прикрутить» популярные bb-теги. многие с этим наверняка знакомы, например, тек ссылки будет выглядеть так:
[url]https://a-panov.ru/[/url]
соответствующая функция сама разберёт всё на составляющие и создаст код для вставки, который на страничке будет таким:
теперь можно подвести краткий итог:
1. либо перед записью в базу, либо перед выводом в браузер текста, который пришёл от пользователя, его требуется экранировать функцией htmlspecialchars (но только 1 раз);
2. если хочется дать пользователям некоторые специальное возможности, в виде раскраски текста, оставления ссылок и других, лучше всего это делать посредством bb-кодов. и обработка должна осуществлять после выполнения п. 1 (иначе данные, переведённые в коду, будут представлены html-мнемониками).

днём интернета

шоколадкой для работы мозга

коробочкой ароматного чая для бодрости

продлением хостинга на +1 месяц
Вы пишите, что в форме если хочется оставить теги красивости — жирный и тд то лучше использовать BB коды и что функция сама их «увидет». ПРо какую функцию идет речь?
в php такой встроенной функции нет. но в интернете есть очень много реализаций подобного. в простейшем случае замена может выглядеть так:
$post = preg_replace(‘!\[b\](.+)\[/b\]!i’, ‘$1‘, $post);
по тексту ищется что-то вроде: [b]жирный текст[/b] и замена выше превратит его в жирный текст
на самом деле, в интернете много готовых решений, и даже по корявому запросу «php функция bb-коды» кое-что можно найти
Если создать в контексте таймер и присвоить его к переменной, после запуска уничтожив ID — получится не плохой червяк. Его уже будет не остановить и не найти пока страница не обновится или не произойдет переход
Дмитрий, я так понимаю, Вы крупный специалист по javascript? По крайней мере, при просмотре странички так показалось
Просто любитель, если честно. Где же их сыскать таких крупных? Если только в браузерных компаниях и то там слово ECMA сильнее восприниматеся.
Почитал Рэзига, добавил пару своих фишек и перестал разбираться в jQuery и всяком другом.
Раньше у меня была идея-фикс делать всё самому. Никаких фреймворков и прочее. Но после того, как заставил себя познакомиться с jQuery, мнение своё изменил.
Это не значит, что данный фреймворк используется везде — если нужно получить значение какого-нибудь поля, выполнить над ним математические действия и вывести на экран, делать буду на JS. А для сложных плюшек или красивостей — jQuery.
Нужно взять sizzle и добавить к нему один единственный AJAX + парочка вспомогательных функций. Вот и весь фреймворк. Тут в дизайне дело больше, чем в UI на мой взгляд.
Поэтому лабают не стеcняясь. Я ценю когда лишнего нет — из-за интернета в основном.
Тут согласен, интернет диктует условия. Если скорость соединения низкая, либо существует плата на трафик, начинаешь подстраивать всё под себя. А когда у всех знакомых интернет — быстрый безлимит, руководствуешься принципом разумной достаточности. Хотя мой первый сайт, помнится, содержал картинки в формате *.bmp, с чего до сих пор от себя офигеваю.
Sizzle шикарен и минималистичен, не подкопаться.
Хех … ту не в этом дело. Я уже давно не обращаю внимание на интернет с точки зрения его проводных характеристик. Вышел даже из пользователей WIFI, что намекает про мобильность.
А у мобильного интернета стоимость сегодня совсем уже не приятная. Она сравнялась со стоимостью интернета на проводах 6-7 лет назад, а слова безлимитный в России почти нет.
Это 100mb в сутки безлимом не назвать, остальное по 8, 15 Gb и на день и ночь, а когда торрент выгрузит случайно все что стояло в фоне(исходящий) скорость станет 7-30кб в реальности.
Вот это важно. У меня другого интеренета, да мне другой и не нужен. Я себе специально делал систему под хакинтош, чтобы работать комфортно. Кароче учитывая всех мне подобных — я точно уверен, что чем компактнее сделаешь — тем меньше у них ненависти к провайдеру.
Мне хорошо — им хорошо, а тем у кого вафля и провода — даже не понять как это работает. Я вот так на жизнь и сайты смотрю уже года 4, но паблик пока не подрос до этого, да и не ранжируют этим.
Sizzle — все что надо от jQuery
Я вот вспоминаю, как лет 8 назад на телефонах (не смартах) Nokia «смотрели большой интернет», и ничего так.
А сейчас, набаловались, из коробки всем интерфейсу и юзабилитей подавай
Шутки шутками, но печально, что до сих пор ни одна компания не предлагает мобильного безлимита. Только по телику рекламят «целых 100 мегабайт в сутки», а это, по сути, 3 клипа на Ютубе в хорошем качестве. Не позорились бы хоть такими числами, у меня 10 лет назад подключение по такому тарифу было.
Ну а в Москве людям проще, там WiFi есть (и Yota, про которую не знаю, да и не особо хочется что-то узнавать).
Ыыы ;) В принципе на VNC хватит или RDP
если у серва нормальный и проводной инет. Вот только без звука, сцуко.