Как запретить скачивание exe файлов в браузере?
Чисто случайно решил очень интересный кейс о том, как заблокировать возможность загрузки .exe и .msi файлов в браузере. Дома в этом смысла нет, а вот в организации очень нужная и интересная история.
Я пытался найти в интернете решение и был удивлен - готовых расширений нет, а всяческие блокировщики рекламы и скриптов необходимую функциональность не обеспечивают, не говоря уже о вопросе надежности и конфиденциальности самих этих расширений. Да даже вопрос ручной установки расширений в Яндекс Браузере толком не раскрыт, хотя казалось бы, оба вопроса очень важны и интересны, поэтому пришлось самому искать решение вопроса.
В чем суть? Зачем?
Пользователи в поисках легальных и разрешенных вещей могут наткнуться на большую зеленую кнопку скачать, которая будет вести не на необходимую для работы книгу формата pdf или отчет в формате excel, а на файл книга.exe. В лучшем случае, это будет загрузчик книги, который покажет сотню рекламных объявлений, а в худшем загрузчик вредоносного программного обеспечения, открывающего хакеру доступ во внутреннюю сеть.
Мы опустим варианты, когда вредоносный код встраивают прямо в pdf, xls или doc, от этого уже сложнее защититься, да и это целая тема для отдельной статьи. Наша цель - запретить пользователю скачивать exe и msi файлы. Администратор всегда будет знать как разрешить.
Свое расширение для блокировки скачивания exe и msi файлов в Яндекс Браузере
И так, я решил написать расширение для Яндекс Браузера (подойдёт и для Google Chrome). Название не принципиально, поэтому написал Block Downloads.
Создаем папку Block Downloads, а в ней нужно будет создать три файла.
Создаем файл manifest.json со следующим содержимым:
{
"name": "Block Downloads",
"version": "1.0",
"manifest_version": 2,
"permissions": [
"webRequest",
"webRequestBlocking",
"downloads",
"<all_urls>"
],
"background": {
"page": "background.html",
"persistent": true
}
}
Далее создаем файл background.js со следующим содержимым:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if (details.url.endsWith(".exe") || details.url.endsWith(".msi")) {
return {cancel: true}; // блокировка скачивания exe и msi файлов
}
},
{urls: ["<all_urls>"]},
["blocking"]
);
И наконец-то создаем последний файл background.html со следующим содержимым:
<!DOCTYPE html>
<html>
<head>
<title>Background Page</title>
<!-- Здесь вы можете добавить стили или подключить дополнительные ресурсы, если это необходимо -->
</head>
<body>
<!-- Содержимое фоновой страницы -->
<script src="background.js"></script>
</body>
</html>
Код максимально простой, при чем настолько, что в нем сможет разобраться даже тот IT-специалист, который никогда в своей жизни не написал ни одной строчки кода. Ну и несложно догадаться как добавить другие форматы файлов для блокировки.
Установка нашего расширения в Яндекс Браузере из папки
Для начала открываем в Яндекс браузере страницу browser://extensions/
Откроется непривычная страница управления расширениями, в которой необходимо включить режим разработчика (бегунок справа сверху). Потом нажимаем на кнопку "Загрузить распакованное расширение" и указываем папку с нашим расширением.
Наше расширение появится в списке и сразу будет включено. Есть кнопка ошибки, которая будет ругаться в версию манифеста, но это не критично, так как свою функцию расширение выполняет без проблем.
Пробуйте скачать exe или msi файл, например, с github и эти попытки будут заблокированы.
Обратите внимание на то, что тут указано "Страница заблокирована расширением", то есть всё работает идеально!