Ссылка на профиль есть, а профиля по этой ссылке — нет
Несколько недель назад я захотел убрать точку в юзернейме на Фейсбук, которая для моего перфекционизма была как красная точка на лбу для человека, который не исповедует индуизм. В этой статье я напишу что из этого вышло и как я создал царство мёртвых юзернеймов, которые больше никогда не увидят нового хозяина. Если, конечно, Фейсбук не захочет решить эту проблему.
Зайдя в настройки, я ввёл новый юзернейм (было: «fb.com/Имя.Фамилия», а нужно было «fb.com/ИмяФамилия») и нажал «Сохранить изменения». При этом нужно заметить, что данный юзернейм был доступен, и сохранение изменений было возможным, чего быть не должно было, т.к. на самом деле точка в юзернейме Фейсбука не играет никакой роли, т.е. можно проходить по ссылке без точки или же, наоборот, с кучей точек, но при этом окончательный URL будет таким, как он выглядит в настройках.
Например:
Если ссылка на профиль выглядит fb.com/Name.Surname, то при вводе fb.com/NameSurname или даже fb.com/Name.....Sur...na.me (где точек можно ставить сколько угодно и где угодно) будет переходить на профиль так, будто этих точек вообще не существует.
После сохранения настроек я получил интересное сообщение о том, что этот юзернейм больше не доступен, хотя секунду назад рядом с ним был текст «Username is available»
После чего я попробовал ввести этот юзернейм заново, но в этот раз рядом был уже другой текст «Username is not available» и сохранение было невозможным.
Я даже подумал, что кто-то внезапно занял такой же юзернейм (при том, что его невозможно было занять, т.к. точка не влияет никакой роли, а значит у другого юзера при попытке сделать такой юзернейм было бы «Username is not available», однако у меня это было возможным).
Дальше я решил перейти на свой профиль, но после нажатия на иконку профиля, я попал на страницу с ошибкой. Такого URL больше не существовало. Мой старый юзернейм пропал, и я получил стандартный айди номер в виде кучи цифр, которые буквально смеялись над моим перфекционизмом.
Тогда я снова зашёл в настройки и попытался сменить юзернейм на старый, но он был недоступен.
Немного расстроившись от такого несовершенства, я отрепортил проблему и забил, иногда всё же пытаясь поменять юзернейм.
Примерно через 3 недели мне пришёл ответ от саппорта-микроволновки со стандартным ответом «Спасибо за репорт, нам это очень важно». Разумеется, никто ничего и не сделал для исправления этой ошибки. Видимо, они слишком сильно заняты блокировками за непристойные картинкам и слова, поэтому исправлять баги им некогда.
Поиск решения
Тогда я решил попытаться самостоятельно вернуть себе свой старый юзернейм и стал искать различную информацию по этому багу. Но ничего подобного не было, лишь куча вопросов о том, как можно менять юзернейм после лимита, т.к. в Фейсбуке можно поменять юзернейм всего 2 раза.
После нескольких экспериментов с изменением юзернейма, я понял всю суть этой ошибки.
Оказалось, что при добавлении точки в юзернейм (главное, чтобы она была в слове, а не перед или после), либо при удалении этой самой точки (если она уже есть) и последующем сохранении изменений, этот юзернейм сбрасывался и становился недоступным. И такой сброс был безболезненным для ограничения изменений юзернейма. То есть благодаря этому багу можно менять юзернеймы бесконечное количество раз.
Правда, после 10 изменений подряд за короткое время, появляется сообщение о слишком частых попытках. Такое сообщение, судя по поиску, выдаётся при частых логинах или ещё каких-либо ошибках. Но через 1-2 часа я снова смог сменить юзернейм 10 раз подряд, получив то же сообщение.
В общем, суть ошибки стала полностью понятна, поэтому я решил написать подробное объяснение для лентяев из Фейсбук и отправил им репорт по whitehat программе. По идее, там принимают только сообщения об уязвимостях безопасности, но всё же там есть и «прочее». В обычный саппорт писать желания уже не было, т.к. после трёх-недельного ожидания пришёл лишь ответ от робота. Да и разве полное уничтожение юзернейма с последующей невозможностью его восстановить, нельзя считать уязвимостью в безопасности?
Потратив какое-то время на подробное описание бага, где я также попросил вернуть мой нормальный юзернейм вместо кучи цифр, я отправил репорт о баге. На этот раз специалисты были уже немного побыстрее, ведь они ответили на второй день после отправления репорта. Неплохо для миллиардной компании мирового уровня, да?
Ответ был гениальный. Специалист по безопасности написал, что они занимаются только уязвимостями в безопасности, а т.к. это не угрожает безопасности, то им всё равно. И предложил написать в саппорт. В тот самый, где отвечают роботы.
Конечно же, никакого желания писать в саппорт у меня не появилось. Ко всему прежнему несовершенству Фейсбук добавилось ещё и наплевательское отношение к своему же продукту, не говоря уже о пользователях. Или же я придираюсь, и в компаниях такого уровня не принято перенаправлять вполне важные письма об ошибках в другой отдел?
В общем, я решил описать действие этого бага. Возможно, что для кого-то это будет полезная информация. А кто-нибудь, возможно, сможет придумать какое-нибудь более существенное применение этой ошибке.
Способ воспроизведения ошибки
Итак, само описание этого безболезненного сброса юзернейма, которое позволяет менять его бесконечное количество раз. Но нужно заметить, что если не сбросить юзернейм таким способом и сменить на другой, то следующая смена может быть последней.
Внимание! Данный способ полностью уничтожает действующий юзернейм, после чего его уже нельзя будет никогда использовать.
На самом деле всё просто:
1. Заходим в настройки.
2. Добавляем в любом месте юзернейма точку (даже если она уже там есть) и видим, что он свободен, поэтому можно нажать «Сохранить».
3. Получаем сообщение об ошибке, и этот юзернейм больше не существует. Никто больше не сможет его занять. Даже вы.
4. Дальше можно ввести новый юзернейм и при желании также потом его сбросить добавлением точки. Даже если этот баг пофиксят, то у вас всегда будет ещё один шанс сменить юзернейм, как и у обычных юзеров.
Здесь я действовал наоборот — убирал точку. Так тоже можно
Заключение
Самое интересное, что система безопасности Фейсбука не посчитала этот баг чем-то плохим. При том, что применение этого бага навсегда уничтожает юзернейм. После такого сброса его уже никто не сможет поставить. То есть, при желании, кто-нибудь может генерировать годные юзернеймы и сбрасывать их, тем самым буквально уничтожая их. Насколько мне известно, на данный момент не существует других вариантов, при которых юзернеймы становились бы недоступными, при условии, что это не запрещённое слово и юзернейм не занят.
Возможно, что с помощью этой ошибки можно сбросить и юзернейм другого пользователя, но с кодом я не особо дружу, поэтому не смог ничего такого реализовать. Если у кого-то это получится, то тогда, надеюсь, лентяи из Фейсбука обратят на это внимание. Ну и, возможно, выплатят вам вознаграждение по программе whitehat.
Так как в Фейсбук можно сделать тестовый аккаунт (правда для изменения юзернейма нужно будет всё же подтвердить через смс, что кажется немного бредовым для тестового аккаунта), то всё можно делать в рамках правил. Правда, если аккаунт тестовый и с ним можно делать что угодно, то юзернеймы — реальные. И уничтожаются они из реальной базы. Но это уже проблемы Фейсбук.
Кстати, если кто-нибудь найдёт дверь в царство уничтоженных юзернеймов и способ их восстанавливать, то это будет очень полезная информация для меня. Т.к. это, в общем-то, и есть главная причина, по которой я писал в Фейсбук. А то при виде кучи цифр в юзернейме моего профиля мне как-то не уютно. А другой ставить не хочется, бывает такое.
Автор: Witja