Переходя по ссылкам, размещенным во Вконтакте, можно заметить, что как и в остальных социальных сетях, сначала происходит переход на «безопасную» ссылку, после чего социальная сеть решает: нужно ли пускать пользователя дальше или нет. Большинство внимательных людей замечали пол-секундное появление «vk.com/away.php» в адресной строке браузера, но, конечно, не придавали этому значения.
Однажды, некий программист, доделав очередной проект, осознал, что одержим желанием о нём всем рассказать. Проект размещался на сервере с уникальным IP, но без доменного имени. Поэтому на скорую руку был сделал красивый поддомен третьего уровня в домене .ddns.net, который в итоге использовался в качестве ссылки.
Вернувшись через некоторое время к посту, программист обнаружил, что вместо сайта открывается заглушка вк, осведомляющая о переходе на небезопасный сайт:
Казалось бы, умные пользователи сами вправе решать, на какой сайт им переходить, а на какой нет, однако Вконтакте думает иначе и не предоставляет никакой возможности без костылей перейти по ссылке.
У такой реализации есть несколько весомых недостатков:
Оптимальным решением всех выше перечисленных проблем может стать расширение для браузера. По очевидным причинам выбор падает на Chrome. На хабре есть отличная статья статья посвященная написанию расширений для Сhrome.
Для создания такого расширения нам понадобится создать в отдельной папке два файла: json-Manifest и JavaScript-файл для мониторинга текущего url адреса.
Главное что нам нужно — дать расширению разрешение на работу с вкладками и назначить исполняемый скрипт:
Здесь всё просто: в событие, вызываемое при создании новой вкладки, добавляем проверку на url адрес, если он начинается на «vk.com/away.php», то заменяем его на правильный, который находится в GET-запросе:
Убедившись что оба файла лежат в одной папке, открываем Chrome, выбираем вкладку расширения и нажимаем «Загрузить распакованное расширение». В открывшемся окне выбираем папку написанного расширенная и нажимаем собрать. Готово! Теперь все ссылки вида vk.com/away заменяются на исходные.
Конечно, такой тип заглушек спас много людей от миллионов мошеннических сайтов, однако, я считаю, что люди сами в праве решать, переходить им на небезопасную ссылку или нет.
Для удобства я разместил проект на github.
Предыстория
Однажды, некий программист, доделав очередной проект, осознал, что одержим желанием о нём всем рассказать. Проект размещался на сервере с уникальным IP, но без доменного имени. Поэтому на скорую руку был сделал красивый поддомен третьего уровня в домене .ddns.net, который в итоге использовался в качестве ссылки.
Вернувшись через некоторое время к посту, программист обнаружил, что вместо сайта открывается заглушка вк, осведомляющая о переходе на небезопасный сайт:
Казалось бы, умные пользователи сами вправе решать, на какой сайт им переходить, а на какой нет, однако Вконтакте думает иначе и не предоставляет никакой возможности без костылей перейти по ссылке.
Что не так
У такой реализации есть несколько весомых недостатков:
- Отсутствие возможности открыть подозрительный сайт. Как говорилось выше, у пользователя нет возможности преодолеть заглушку. Единственный способ открыть ссылку — скопировать ее и вставить в адресную строку.
- Замедляет переход по ссылке. Скорость перенаправления зависит от пинга. Соответственно при большом пинге, могут пропасть драгоценные секунды жизни, что, как мы знаем, не допустимо.
- Мониторинг переходов. Такой метод облегчает сбор информации о действиях пользователей, чем конечно же и пользуется Вк, добавляя к безопасной ссылке id поста с которого был сделан переход.
Освобождаем Джанго
Оптимальным решением всех выше перечисленных проблем может стать расширение для браузера. По очевидным причинам выбор падает на Chrome. На хабре есть отличная статья статья посвященная написанию расширений для Сhrome.
Для создания такого расширения нам понадобится создать в отдельной папке два файла: json-Manifest и JavaScript-файл для мониторинга текущего url адреса.
Создаем Manifest файл
Главное что нам нужно — дать расширению разрешение на работу с вкладками и назначить исполняемый скрипт:
{
"manifest_version": 2,
"name": "Run Away From vk.com/away",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"permissions": ["tabs"],
"browser_action": {
"default_title": "Run Away From vk.com/away"
}
}
Создаем js файл
Здесь всё просто: в событие, вызываемое при создании новой вкладки, добавляем проверку на url адрес, если он начинается на «vk.com/away.php», то заменяем его на правильный, который находится в GET-запросе:
chrome.tabs.onCreated.addListener( function (tabId, changeInfo, tab) {
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
var url = tabs[0].url;
if (url.substr(0,23) == "https://vk.com/away.php"){
var last = url.indexOf("&", 0)
if(last == -1)last = 1000;
var url = decodeURIComponent(url.substr(27, last-27));
chrome.tabs.update({url: url});
}
});
});
Собираем расширение
Убедившись что оба файла лежат в одной папке, открываем Chrome, выбираем вкладку расширения и нажимаем «Загрузить распакованное расширение». В открывшемся окне выбираем папку написанного расширенная и нажимаем собрать. Готово! Теперь все ссылки вида vk.com/away заменяются на исходные.
Вместо заключения
Конечно, такой тип заглушек спас много людей от миллионов мошеннических сайтов, однако, я считаю, что люди сами в праве решать, переходить им на небезопасную ссылку или нет.
Для удобства я разместил проект на github.