EVE Online, HTTP-заголовки и идентификация на игровых сайтах

23 апреля 2011 г.

Предисловие, или с чего все началось

Как обычно, все началось с обычного интереса на тему «как это устроено?». Объектом интереса на этот раз была система учета активности игрового альянса (наверное, вы уже догадались по заголовку, что речь идет об игре EVE Online). Одной из ее особенностей является то, что она не требует от пилотов каких-либо действий для идентификации, т.е. все что нужно сделать пользователю — добавить сайт в список доверенных, а затем нажать кнопку напротив нужного флота.

Погуглив, был сделан вывод, что в EVE Online есть всего два способа узнать информацию об игроке:

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

Многие, наверное, уже думают: «Пользователь ведь сам добавил сайт в список доверенных, т.е. он доверяет этому сайту, что же тут такого?». Но статья несколько не о том. Допустим, сайту действительно можно доверять, но можно ли доверять пользователю, который на этот сайт пришел? Ведь ничто не мешает подставить в HTTP-заголовки любой альянс, корпорацию и имя персонажа.

HTTP-заголовки игрового браузера, или как это работает

Прежде всего, стоит начать с понятия «доверенного» режима игрового браузера. До тех пор, пока сайт не добавлен в список доверенных, браузер выдает лишь стандартные заголовки (User-Agent, Referer и т.д.). Когда сайт добавляется в доверенные, появляется заголовок HTTP_EVE_TRUSTED, содержащий значение «Yes», а также заголовки с информацией о персонаже.

Список заголовков

Здесь я перечислю основные заголовки. Более подробный список заголовков игрового браузера можно найти в вики EVE Online.

  • HTTP_EVE_CHARNAME — Имя персонажа.
  • HTTP_EVE_CHARID — Целочисленный идентификатор, связанный с именем персонажа.
  • HTTP_EVE_CORPNAME — Название корпорации.
  • HTTP_EVE_CORPID — Идентификатор корпорации.
  • HTTP_EVE_ALLIANCENAME — Название альянса.
  • HTTP_EVE_ALLIANCEID — Идентификатор альянса.
  • HTTP_EVE_REGIONNAME — Название региона, в котором находится персонаж.
  • HTTP_EVE_CONSTELLATIONNAME — Название констелляции (созвездия), в которой находится персонаж.
  • HTTP_EVE_SOLARSYSTEMNAME — Солнечная система, в которой находится персонаж.

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

Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0 EVE-IGB

Практическая реализация, или как это использовать

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

Лично я решил пойти простым путем, установив в Firefox плагин Modify Headers.

Окно настроек плагина выглядит следующим образом (поле Value очищено намеренно):

Удобство заключается в том, что можно заранее вбить список нужных заголовков, а потом двойным кликом мыши (либо нажатием на «Enable/Disable») выбирать нужные.

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

Чего можно добиться, подменив заголовки

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

Вот собственно и все, спасибо за внимание.

Теги: рубрика Сайтостроение