Klikając linki zamieszczone na VKontakte, zauważysz, że podobnie jak w innych sieciach społecznościowych najpierw następuje przejście do „bezpiecznego” linku, po czym sieć społecznościowa decyduje, czy użytkownik powinien pozwolić dalej, czy nie. Najbardziej uważne osoby zauważyły półsekundowe pojawienie się „vk.com/away.php” w pasku adresu przeglądarki, ale oczywiście nie przywiązywały do tego żadnej wagi.
prehistoria
Pewnego dnia pewien programista po ukończeniu kolejnego projektu zdał sobie sprawę, że ma obsesję na punkcie chęci powiedzenia o tym wszystkim. Projekt był hostowany na serwerze z unikalnym adresem IP, ale bez nazwy domeny. Dlatego w domenie .ddns.net szybko powstała piękna subdomena trzeciego poziomu, która ostatecznie posłużyła jako link.
Wracając po chwili do wpisu, programista odkrył, że zamiast strony otwierał się odgałęzienie VK informujące o przejściu na niebezpieczną stronę:
Wydawałoby się, że mądrzy użytkownicy sami mają prawo decydować, na którą stronę powinni wejść, a na którą nie, ale VKontakte myśli inaczej i nie daje możliwości skorzystania z linku bez kul.
Co jest nie tak
Ta implementacja ma kilka istotnych wad:
- Niemożność otwarcia podejrzanej witryny. Jak wspomniano powyżej, użytkownik nie ma możliwości pokonania odcinka pośredniczącego. Jedynym sposobem otwarcia linku jest skopiowanie go i wklejenie w pasku adresu.
- Spowalnia nawigację po linkach. Szybkość przekierowania zależy od pingu. W związku z tym przy wysokim pingu można stracić cenne sekundy życia, co, jak wiemy, jest niedopuszczalne.
- Monitorowanie przejścia. Metoda ta ułatwia zbieranie informacji o działaniach użytkownika, z czego oczywiście korzysta VK, dodając do bezpiecznego linku identyfikator wpisu, z którego nastąpiło przejście.
Uwolnienie Django
Optymalnym rozwiązaniem wszystkich powyższych problemów może być rozszerzenie przeglądarki. Z oczywistych względów wybór padł na Chrome. Na hubie jest świetny
Aby utworzyć takie rozszerzenie, będziemy musieli utworzyć dwa pliki w osobnym folderze: plik json-Manifest i plik JavaScript do monitorowania bieżącego adresu URL.
Utwórz plik manifestu
Najważniejsze, czego potrzebujemy, to dać rozszerzeniu pozwolenie na pracę z zakładkami i przypisać wykonywalny skrypt:
{
"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"
}
}
Utwórz plik js
Tutaj wszystko jest proste: w zdarzeniu wywołanym podczas tworzenia nowej zakładki dodajemy sprawdzenie adresu URL, jeśli zaczyna się od „
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});
}
});
});
Montaż przedłużenia
Po upewnieniu się, że oba pliki znajdują się w tym samym folderze, otwórz przeglądarkę Chrome, wybierz zakładkę rozszerzenia i kliknij „Załaduj rozpakowane rozszerzenie”. W oknie, które zostanie otwarte, wybierz folder zapisanego rozszerzonego pliku i kliknij Zbierz. Gotowy! Teraz wszystkie linki takie jak vk.com/away zostaną zastąpione oryginalnymi.
Zamiast zawierania
Oczywiście tego typu stub uratował wiele osób przed milionami fałszywych witryn, jednak uważam, że ludzie sami mają prawo zdecydować, czy kliknąć niebezpieczny link, czy nie.
Dla wygody zamieściłem projekt na
Źródło: www.habr.com