Рубрика «баг»

Привет! Представьте ситуацию: вы нашли крутой сервис, регистрируетесь, вводите свой email my.name+coolservice@gmail.com (ведь вы, как и я, любите порядок во входящих) и… получаете ошибку «Некорректный email». Знакомо? Уверен, что да.

Каждый раз, когда я сталкиваюсь с таким, у меня дергается глаз. Это не просто мелкий баг. Это симптом глубокой проблемы в подходе к разработке и непонимания базовых стандартов. Давайте раз и навсегда разберемся, почему сервисы не принимают почту с «плюсом», почему это плохо для бизнеса и, главное, как это исправить.

Как должно работать: магия субадресации по RFC 5322Читать полностью »

Решил немного погамать и включил клиент Steam, считающий, что он принадлежит резиденту Сингапура на своём ПК, считающим, что он находится в Республике Беларусь.
Пока клиент грузился - драйвера от Realtek привычно откинули копыта, переключился в Troubleshoot sound problems и... когда трабл был успешно пришутен, я услышал

"...в кровавом Мордоре..."

Неужто что-то новое по вселенной JRRT вышло? - подумал я и аль-табнулся.

Баг в ВК, или Как поступить на факультет пиратов в МГУ - 1

Привет! Меня зовут Василий Брит, и я уже почти пять лет работаю программистом в компании Positive Technologies. Сегодняшний рассказ будет про веселый баг про веселую фичу на vk.com, которая существует больше 10 лет.

Читать полностью »

При использовании компаратора в алгоритмах boost::sort и std::sort важно учитывать некоторые особенности работы этих алгоритмов, игнорирование которых может привести к неожиданным последствиям, в том числе к segmentation fault.

image

Чаще всего при сортировке объектов пользовательских типов написание кода сравнения элементов коллекции не вызывает вопросов. Компаратор должен возвращать true, если первый аргумент меньше второго, то есть в отсортированном массиве первый аргумент должен идти перед вторым. Алгоритмы сначала вызывают компаратор для пары элементов x и y. Если компаратор вернул true, значит, элемент x меньше y и он должен идти в коллекции перед элементом y, если false, то компаратор вызывается повторно для пары y и x. Если компаратор опять вернул false, значит, элементы равны, иначе порядок определен.

Меня зовут Олег Игнатов, я — Development Team Lead в команде KICS (Kaspersky Industrial CyberSecurity) «Лаборатории Касперского». Мы защищаем промышленные инфраструктуры и сети от специализированных киберугроз. В этой статье расскажу о некоторых особенностях использования компараторов в С++, знание которых позволит не наступить на различные грабли и сэкономить время при разборе багов.
Читать полностью »

image

{"__typename":"PageLikeAction","action_type":"LIKE","label":{"text":"Like"}

В 2009 году Facebook добавила в интерфейс своей социальной сети код, изменивший мир — кнопку «Like». «Лайк» был детищем нескольких программистов и дизайнеров — Лии Перлман и Джастина Розенштейна. Они предположили, что пользователи Facebook часто бывают слишком заняты, чтобы оставлять комментарии к постам своих друзей, и что поэтому им нужна простая кнопка, нажав которую можно было бы дать понять друзьям, что их пост вам понравился. Так оценивать и поощрять друг друга пользователям стало бы легче, а значит и делали бы они это чаще.

Это сработало — и даже слишком хорошо. К 2012 году пользователи прожали «лайк» триллион раз. У этого оказались и побочные эффекты. Многие стали публиковать фото/видео, чтобы потом сидеть и с тревогой обновлять страницу, ожидая, когда же число лайков возрастёт. Все стали гадать, почему кто-то другой получает больше лайков. Люди подсели на иглу одобрения (вместо того, чтобы сесть на чьё-то лицо), что отразилось на их повседневной онлайн-активности: старались публиковать как можно больше постов, чтобы казаться смешнее, умнее, красивее, спортивнее.

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

Я давненько уже читаю Хабр, скоро 10 лет будет. Конечно, немало раз я натыкался на какие-то баги, которые добросовестно репортил через форму "Техническая поддержка" в футере страницы. И всегда реакция была довольно адекватной, техподдержка сразу понимала мои репорты, либо подтверждала, либо уточняла технические детали.

А недавно обнаружил очередную проблему. Ссылки на разделы вверху сайта ("Моя лента", "Все потоки", "Разработка" — вот это вот все) ведут себя некорректно (UPD:Читать полностью »

Кража закрытых видео YouTube по одному кадру - 1

В декабре 2019 года, спустя несколько месяцев после того, как я занялся хакингом по программе Google VRP, я обратил внимание на YouTube. Мне хотелось найти способ получать доступ к закрытым (Private) видео, которыми я не владею.

При загрузке видео на YouTube можно выбрать один из трёх параметров доступа. «Открытый» (Public) позволяет находить и просматривать видео любым пользователям, «Доступ по ссылке» (Unlisted) позволяет просматривать видео только пользователям, знающим ID видео (URL), «Ограниченный доступ» (Private) позволяет просматривать видео только вам или другим аккаунтам, которым дано на это разрешение.

Первым делом я загрузил видео на свой второй тестовый канал аккаунта YouTube и переключил параметры доступа видео на Private, чтобы его можно было использовать для тестирования. (Помните, что тестирование всегда нужно проводить на тех ресурсах/аккаунтах, которыми вы владеете!) Если я смогу найти способ получить доступ к видео с первого тестового аккаунта, то мы выявим наличие бага.

Я открыл YouTube под первым аккаунтом, проверил каждую функцию и нажал на каждую кнопку, которую смог найти. Каждый раз, когда я видел HTTP-запрос с указанием ID видео, я заменял его на тестовое видео с доступом Private, надеясь, что так утечёт какая-нибудь информация о нём, но успеха не добился. Похоже, что основной веб-сайт YouTube (по крайней мере, все его конечные точки, которые я протестировал) всегда проверяет, находится ли видео в состоянии Private, и когда пытается выполнить запрос к целевому закрытому видео, он всегда возвращает ошибки наподобие This video is private!.

Мне нужно найти другой способ.
Читать полностью »

Введение

Написать этот пост меня вдохновила статья, которая давно висит на Хабре. Сразу хочу извиниться перед автором, лучше названия и придумать нельзя. Как вы все знаете «Пятерочка» активно рекламирует свои карты лояльности. В статье выше нам рассказывали о том, что мошенники активируют чужие карточки и списывают баллы. Хакеры пошли дальше и вместо активации чужих карт просто стали взламывать личные кабинеты пользователей. А что? Звучит даже проще активации карт, давайте разберёмся поподробнее.
Читать полностью »

«Особенность» Instagram - 1

В 2020 году даже если злоумышленник попал в ваш аккаунт социальной сети, это неприятно, но не критично. Ведь у нас есть двухфакторная аутентификация на многие важные действия, а доступа к почте/телефону у злоумышленника нет и аккаунт ему не угнать. Так ведь? Нет.

В Instagram -Читать полностью »

Браузер и числа с плавающей запятой - 1
Изображение — www.freepik.com

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

Часть 1: нереальные ожидания

Баг назывался «JSON некорректно парсит 64-битные Integer»; поначалу это непохоже на проблему с плавающей запятой или браузером, но его отправили на crbug.com, поэтому меня попросили взглянуть. Проще всего воссоздать его, открыв инструменты разработчика Chrome (F12 или Ctrl+Shift+I) и вставив в консоль разработчика следующий код:

json = JSON.parse(‘{“x”: 2940078943461317278}’); alert(json[‘x’]);

Вставка неизвестного кода в окно консоли — замечательный способ оказаться взломанным, но этот код был настолько прост, я смог понять, что он не вредоносный. В отчёте о баге автор любезно указал свои ожидания и реальные результаты:
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js