Каскадные Таблицы Стилей → Браузеры запутались в блочной модели для таблиц
В процессе создания новой версии своего грида на JavaScript, столкнулся с не очень приятным багом. Причем там, где меньше всего ожидал…Казалось бы, на дворе 2012 год, новые версии браузеров выпускают, чуть ли не каждый месяц, а их производители, рапортуют о внедрении даже черновиков стандартов. Как в такой ситуации можно было ожидать проблем с «древними» табличками и стилями, отвечающими за их размеры.
Похоже, производители браузеров в гонке за количеством внедренных черновиков – забыли, что стандарты нужно не только поддерживать, но и поддерживать правильно и одинаково.
PHP → Подводный камень в foreach($items as &$item)
Многие любят писать такие конструкции в том или ином виде, каждый сталкивался:
Но не многие подозревают о том, какая опасность тут скрывается.
Рассмотрим пример.
foreach ($items as &$item) {
$item += 2;
}
Но не многие подозревают о том, какая опасность тут скрывается.
Рассмотрим пример.
Вопросы безопасности в веб-технологиях → Обнаружение бага на предвыборном сайте Путина
В этом посте я расскажу о процессе и результатах тестирования сервиса предложений избирателей на восстановленном после сбоя сайте putin2012.ru и расскажу о найденной ошибке, из-за которой неправильно учитываются голоса за некоторые из предложений.


Информационная безопасность → Когда инструкцию лучше не читать
Дыры в информационной безопасности бывают разные. Бывают дыры в софте, бывают в железе, бывают в головах людей. А еще бывают в документации. Вот, к примеру, прямо сейчас на сайте весьма известного в Украине банка лежит инструкция, призывающая пользователей корпоративного интернет-банкинга доверять любым фишинговым сайтам, выдающим себя за банк, забивая при этом на все предупреждения браузера о неверных сертификатах. А ведь хотели, наверное, сделать людям полезную доку. Но получилось как всегда.Персональные блоги → Три самых любимых бага из песочницы
Бывают баги а бывают и БАГи. И если баги обычно фиксятся и забываются, то БАГи остаются с нами навсегда. Хочу поделиться с Вами тремя такими БАЖищами.
Первый такой казус произошел в 2005 году, когда я работал на фирме FriendScout24. У нас была тулза для мониторинга, в которой была хтмлная табличка и в каждой строчке по серверу. Если сервер отвечал нормально — он отрисовывался зеленным, если нет то красным. Обычно всё было спокойно зелененьким. И тут, в один прекрасный августовский день, сервера начали падать лесенкой. Пам-Пам-Пам — 4 сервера за 3 минуты. Через 5 минут всё снова позеленело, как будто ничего и не было.
Первый такой казус произошел в 2005 году, когда я работал на фирме FriendScout24. У нас была тулза для мониторинга, в которой была хтмлная табличка и в каждой строчке по серверу. Если сервер отвечал нормально — он отрисовывался зеленным, если нет то красным. Обычно всё было спокойно зелененьким. И тут, в один прекрасный августовский день, сервера начали падать лесенкой. Пам-Пам-Пам — 4 сервера за 3 минуты. Через 5 минут всё снова позеленело, как будто ничего и не было.
Вопросы безопасности в веб-технологиях → Как любовь к музыке помогла найти уязвимость во Flash'е из песочницы
Теплым зимним вечером сидел я за компьютером и решил расслабиться, поиграв на пианино. Так как не фортепиано, не синтезатора у меня нет, я, воспользовавшись поиском, начал искать онлайн пианино с примерами для обычной клавиатуры QWERTY.
Поиск привел меня на страницу форума, где было предложено множество онлайн сервисов. Перейдя по одной из них и поиграв вдоволь, я открыл новую вкладку и начал писать адрес нужного сайта. Каково было мое удивление, когда при вводе адреса я услышал звуки фортепиано.
Поиск привел меня на страницу форума, где было предложено множество онлайн сервисов. Перейдя по одной из них и поиграв вдоволь, я открыл новую вкладку и начал писать адрес нужного сайта. Каково было мое удивление, когда при вводе адреса я услышал звуки фортепиано.
Google App Engine → Ошибка склеивания нескольких Set-Cookie применительно к urllib2/mechanize и её исправление (для Python)
Возможно, кто-то из читателей сталкивался с этой проблемой. В багтрекере GAE она уже давно висит в виде незакрытого Issue 3379. Кажется, изначально проблема касалась только Java, но сейчас она наблюдается и в Python (по крайней мере в 2.7). Описание ошибки и решение для Java можно найти, например, там, а в этом топике речь пойдёт про Python.
Коротко о сути. Часто сайты пытаются установить более одной cookie за раз. Делают они это путём указания нескольких заголовков Set-Cookie в ответе на запрос. По странному ведёт себя в этом случае urlfetch (и базирующиеся на нём urllib/urllib2): все эти заголовки склеиваются в один и разделяются запятыми. Надо ли напоминать, что запятые также присутствуют в полях expiries, а порой и в самих значениях cookie, что очень затрудняет обратный разбор такой строки. А стандартный HTTPCookieProcessor из urllib2 и mechanize просто не справляется с такой ситуацией.
Итак, если ваш проект использует поддержку cookies «из коробки» в urllib2 или mechanize, то вам безусловно подойдёт
Коротко о сути. Часто сайты пытаются установить более одной cookie за раз. Делают они это путём указания нескольких заголовков Set-Cookie в ответе на запрос. По странному ведёт себя в этом случае urlfetch (и базирующиеся на нём urllib/urllib2): все эти заголовки склеиваются в один и разделяются запятыми. Надо ли напоминать, что запятые также присутствуют в полях expiries, а порой и в самих значениях cookie, что очень затрудняет обратный разбор такой строки. А стандартный HTTPCookieProcessor из urllib2 и mechanize просто не справляется с такой ситуацией.
Итак, если ваш проект использует поддержку cookies «из коробки» в urllib2 или mechanize, то вам безусловно подойдёт
Yii — php-фреймворк → Yii 1.1.8 — загрузка файлов с произвольным расширением с помощью CMultiFileUpload
Доброго всем времени суток!
Недавно делая сайт на Yii обнаружили такую вот дыру в загрузке файлов на сервер с помощью CMultiFileUpload (за что отдельное спасибо Mx21): есть возможность взять файл с произвольным расширением, дописать в конец имени что-то вроде .jpg и потом залить на сервер виджетом CMultiFileUpload. Даже не смотря на то, что свойство 'accept' имеет, к примеру, значения 'jpeg|jpg|gif|png', т.е. не должно аплоадить ничего кроме такого рода картинок, происходило следующее: файл без проблем закачивался на сервер, причем .jpg в конечном файле обрезалось и на сервере оказывался исходный файл с тем расширением какое оно было до того как мы его переименовали.
Используемая нами версия фреймворка 1.1.8.
Лечится следующим образом:
В файле /framework/web/js/jquery.multifile.js нужно исправить строки 222-223:
вернее заменить их на следующий код:
Т.е. добавили проверку на количество точек в имени загружаемого файла, если более одной точки получаем сообщение об ошибке «Invalid file type».
Недавно делая сайт на Yii обнаружили такую вот дыру в загрузке файлов на сервер с помощью CMultiFileUpload (за что отдельное спасибо Mx21): есть возможность взять файл с произвольным расширением, дописать в конец имени что-то вроде .jpg и потом залить на сервер виджетом CMultiFileUpload. Даже не смотря на то, что свойство 'accept' имеет, к примеру, значения 'jpeg|jpg|gif|png', т.е. не должно аплоадить ничего кроме такого рода картинок, происходило следующее: файл без проблем закачивался на сервер, причем .jpg в конечном файле обрезалось и на сервере оказывался исходный файл с тем расширением какое оно было до того как мы его переименовали.
Используемая нами версия фреймворка 1.1.8.
Лечится следующим образом:
В файле /framework/web/js/jquery.multifile.js нужно исправить строки 222-223:
if(MultiFile.accept && v && !v.match(MultiFile.rxAccept))//{
ERROR = MultiFile.STRING.denied.replace('$ext', String(v.match(/\.\w{1,4}$/gi)));
вернее заменить их на следующий код:
var str=this.value;
var pattern='\.';
var pos = str.indexOf(pattern);
for (var count = 0; pos != -1; count++)
pos = str.indexOf(pattern, pos + pattern.length);
if((MultiFile.accept && v && !v.match(MultiFile.rxAccept)) || count>1)//{
ERROR = MultiFile.STRING.denied.replace('$ext', String(v.match(/\.\w{1,4}$/gi)));
Т.е. добавили проверку на количество точек в имени загружаемого файла, если более одной точки получаем сообщение об ошибке «Invalid file type».
Информационная безопасность → Баг в хостинге или как делать деньги из воздуха
Приветствую!
В то время как зарубежные компании платят за баги, Российские говорят спасибо или вообще нечего не говорят, молча исправив найденную другим человеком ошибку.
Хочу поделиться тем что происходило на протяжении августовского дня.
А теперь ближе к делу…
Персональные блоги → Ода багу!

Приятно баг исправить поутру,
И целый день убить на развлеченья,
Почитывая фишки-точка-ру
И потребляя кофе и печенье.
Приятно баг исправить и в обед
в прикуску к супу, чипсам и котлете!
И думая, что даже в сорок лет
не так уж плохо жить на этом свете!
Приятно баг исправить перед сном,
и больше ничего уже не править.
Короче, ясно все, как божьим днем —
ПРИЯТНО, БЛЯ, ПРИЯТНО БАГ ИСПРАВИТЬ!
© Михаил Черняховский