Przechodząc po linkach umieszczonych w Vkontakte, można zauważyć, że, jak w innych sieciach społecznościowych, najpierw następuje przekierowanie na „bezpieczny” link, a następnie sieć społecznościowa decyduje, czy puścić użytkownika dalej, czy nie. Większość spostrzegawczych osób zauważyła półsekundowe pojawienie się „vk.com/away.php” w pasku adresu przeglądarki, ale, oczywiście, nie przywiązywała do tego wagi.

Tło
Pewnego dnia pewien programista, kończąc kolejny projekt, zdał sobie sprawę, że ma obsesję na punkcie opowiedzenia o nim wszystkim. Projekt znajdował się na serwerze z unikalnym IP, ale bez nazwy domeny. Dlatego na szybko stworzono ładny subdomen trzeciego poziomu w domenie .ddns.net, który ostatecznie był używany jako link.
Wracając po pewnym czasie do posta, programista odkrył, że zamiast strony otwiera się strona zastępcza Vk, informująca o przejściu na niebezpieczną stronę.

Wydawałoby się, że mądrzy użytkownicy sami powinni decydować, na którą stronę przechodzić, a na którą nie, jednak Vkontakte myśli inaczej i nie daje żadnej możliwości, aby przejść do linku bez dodatkowych działań.
Co jest nie tak
Taka realizacja ma kilka istotnych wad:
- Brak możliwości otwarcia podejrzanej strony. Jak wspomniano wcześniej, użytkownik nie ma możliwości obejścia strony zastępczej. Jedynym sposobem na otwarcie linku jest skopiowanie go i wklejenie w pasku adresu.
- Spowalnia przejście przez link. Szybkość przekierowania zależy od pingu. Odpowiednio przy dużym ping, mogą zniknąć cenne sekundy życia, co, jak wiemy, jest niedopuszczalne.
- Monitoring przejść. Taka metoda ułatwia zbieranie informacji o działaniach użytkowników, z czego oczywiście korzysta Vk, dodając do bezpiecznego linku id posta, z którego nastąpiło przejście.
Uwalniamy Django
Optymalnym rozwiązaniem wszystkich powyższych problemów może być rozszerzenie do przeglądarki. Z oczywistych powodów wybór pada na Chrome. Na Habra jest doskonały artykuł poświęcony pisaniu rozszerzeń dla Chrome.
Aby stworzyć takie rozszerzenie, będziemy potrzebować stworzyć w oddzielnym folderze dwa pliki: json-Manifest oraz plik JavaScript do monitorowania aktualnego adresu url.
Tworzymy plik manifestu
Najważniejsze, co musimy zrobić, to dać rozszerzeniu pozwolenie na pracę z kartami i przypisać skrypt wykonawczy:
{
"manifest_version": 2,
"name": "Uciekaj z vk.com/away",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"permissions": ["tabs"],
"browser_action": {
"default_title": "Uciekaj z vk.com/away"
}
}
Tworzymy plik js
Tutaj wszystko jest proste: w zdarzeniu wywoływanym przy tworzeniu nowej karty dodajemy sprawdzenie adresu url, jeśli zaczyna się on na "", to zamieniamy go na poprawny, który znajduje się w zapytaniu 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});
}
});
});
Tworzymy rozszerzenie
Upewniając się, że oba pliki znajdują się w tym samym folderze, otwieramy Chrome, wybieramy zakładkę rozszerzeń i klikamy „Zainstaluj rozpakowane rozszerzenie”. W otwartym oknie wybieramy folder z napisanym rozszerzeniem i klikamy zbuduj. Gotowe! Teraz wszystkie linki w formacie vk.com/away są zamieniane na oryginalne.
Zamiast zakończenia
Oczywiście, tego typu blokady uratowały wielu ludzi przed milionami oszukańczych stron, jednak uważam, że to ludzie powinni decydować, czy chcą przejść na niebezpieczny link, czy nie.
Dla wygody umieściłem projekt na .
Źródło: habr.com
