среда, 31 августа 2011 г.

Сокращаем произвольные ссылки сервисом G.CO






Google, недавно запустил сервис для сокращения ссылок — G.CO. Предназначен сервис для внутренних служб Google, на данный момент его поддерживает только Google Maps. Там возможно сократить длинный адрес карты. У меня сразу появилось желание поиграться с этой штукой, а точнее сократить внешний URL. О том, как мне это удалось Вы можете почитать в этой статье.







Ловим запрос



Первое, что мне пришло в голову — поймать HTTP запрос к серверу и подменить значение длинного адреса. Для этого я использовал HTTP сниффер. Google шлет вот такой POST запрос для сокращения ссылки:

http://maps.google.ru/maps/urlshortener?q=http:%2F%2Fmaps.google.ru%2F%3Fll%3D55.354135,40.297852%26spn%3D28.518959,86.572266%26z%3D4%26vpsrc%3D0&abauth={уникальное значение}&authuser=0


И от сервера приходит подобный ответ:

{short_url:"http://g.co/maps/a9qd", status_code:0}


К сожалению, если подменить значение q на произвольное, Google не будет сокращать ссылку, а будет возвращать ссылку, которую мы ему отправили, например:

{short_url:"http://habr.ru/", status_code:0}


Так не пойдет. Давайте думать дальше…



Ищем редирект



Вторая идея — найти редирект с maps.google.com на внешний сайт и попробовать сократить такую ссылку. К сожалению, единственный редирект, который я нашел — maps.google.ru/url?q=http://yandex.ru, очевидно, редирект с предупреждением нам не подходит, поэтому будем искать другое решение. Кстати, если адрес редиректа — *.google.com/*, тогда перенаправление работает без всякого предупреждения. Что ж, возьмем это на заметку ;)



Сайты Google



Ещё одна мысль — попробовать запихнуть код редиректа в сайт, созданный через этот сервис. Итак, понятно, что произвольный javascript Google туда вставить не даст, поэтому в панели редактирования страниц нужно выбрать «Добавить дополнительные гаджеты» и в окне выбора гаджетов найти redirect, в настройках выбрать URL, на который гаджет будет перенаправлять и задержку поставить в 0.



И тут я подумал, ведь гаджет находится внутри iframe, то значит, что он работает примерно так:

top.location.href = "http://someurl.com/";




Да, а это значит, что он перенаправит родительское окно!



Теперь нам осталось найти iframe с динамическим URL на сервисе Google Maps.



Ищем iframe на Google Maps



Как я и предполагал, долго искать не пришлось. Iframe нашелся тут:



Вот его адрес.

Очевидно, что тут нужно просто подменить параметр url, но вот опять проблема — url, который открывается внутри iframe может быть только на домене maps.google.com. А вот тут мы и используем наш редирект! У нас получится вот такой адрес:

http://maps.google.ru/maps/empw?url=http://maps.google.com/url?q=https://sites.google.com/site/{yoursite}




В двух словах, что тут происходит:

По адресу maps.google.ru/maps/empw открывается iframe, у которого фильтруется src (разрешено только для домена maps.google.com), мы обходим этот фильтр через редирект maps.google.com/url. А maps.google.com/url перенаправляет адрес айфрема на наш сайт гугл. На сайте гугл, в свою очередь, расположен гаджет редиректа родительского окна браузера.



Пробуем сократить этот адрес, шлем запрос

http://maps.google.ru/maps/urlshortener?q=http://maps.google.ru/maps/empw?url=http://maps.google.com/url?q=https://sites.google.com/site/{yoursite}&abauth={уникальное значение}&authuser=0


Все работает! Отлично.



Живой пример.









Источник: Хабрахабр - Информационная безопасность
Оригинальная страница: Сокращаем произвольные ссылки сервисом G.CO

Комментариев нет:

Отправить комментарий