Как стать автором
Обновить

Как из браузера открыть папку в проводнике Windows используя ExpressJS

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.7K
Всего голосов 26: ↑13 и ↓13+2
Комментарии28

Комментарии 28

А вот чтобы у любого пользователя это работало, нужно что они все себе поставили nodejs и развернули это "суперприложение"?

Очевидно да...

А смысл тогда в этой публикации?

Как из браузера сделать системный вызов на стороне сервера и так всем ясно, какой-нибудь shellexecute с обёрткой на нужном языке, будь то php, python или что иное.

Дать клиенту десктопное приложение которое из коробки умеет все что надо без всяких bloatware

а если приложение web? а не десктоп?
все такие умники, а по факту никто не может ничего сделать?

а если приложение web?

То оно не должно лезть на диск к пользователю, иначе это уже никакой не web. У вас уже не веб если клиенту для полной функциональности надо что то устанавливать, только вместо маленького приложения пользователь получает хзчто в виде nodejs с какими то мутными инструкциями по настройке, и, как ниже отметили, еще и дыры в безопасности. Если вам нужен десктопный UI на html+js то есть электрон, он конечно УГ, но работает. Я уже молчу про то что настоящее веб приложение вы можете хоть с телефона открыть и оно будет точно так же работать, тогда как то что в статье очевидно на телефоне не взлетит

Тут не web в обычном представлении где я открою вашу ссылку и смогу открыть папку. Мне надо поставить node.js и запустить сервер локально.

Во вторых инструкция для новичков? Нет комментариев поясняющие действия. Просто код.

очевидно что тот же Electron умеет это из коробки. Но если нужно WEB?

Значит пишете бэкенд который умеет делать то, что нужно, а не чуть ли не сами даете доступ к системе. Пароль 123 на ssh и то наверное дольше будут ломать

backend написан в данной статье, но он выполняется на стороне сервера, а не на стороне клиента. А вы напишете бэкенд который открывает проводник на клиенте?

Да блин, человек пользовательский ввод в консоли выполняет, тогда уж из уважения к хакерам можно скачать и самому запустить вредоносный эксешник

Как Вы предлагаете распространять этот подход у клиентов? У Вас же фактически клиент должен установить себе десктопное приложение для взаимодействия с сайтом. Лучше тогда сразу писать на электроне.

Так можно дать 10 примеров таких реализаций на разных языках, например: на php:

<?php

function OpenPath()

{

 if( isset($_GET['path']) )

 {

  $path = $_GET['path'];

  

  shell_exec( "start explorer '$path'" );

 }

}

?>

Или на python с использованием Flask сделать.

Это вы к чему? Если клиенту придется локально ставить пхп вместо nodejs и с такими же танцами с бубном поднимать точно такой же локальный сервер, позволяющий выполнять любому подключившемуся произвольный код, дырявым костылем это быть не перестает

Это я для автора, в ответ на:

Предложите свой вариант. Как тогда открыть на машине клиента?

А так согласен, статья не то что не полезная, она реально вредная. Пример того, как поступать не надо.

Предложите свой вариант. Как тогда открыть на машине клиента?

да легко: `python3 -m http.server`

как минимум питон есть почти у всех ибо он из коробки стоит в любом дистрибутиве, а виндовых тачек обычно в офисе сильно меньше.

Изучить Pyhon

Загадка: что будет если ввести такой путь к папке? C:" & rm -rf "C:/Users/User/Desktop
На ответ дается минуты 2, пока машину берут под контроль)

Плюсую Вам.
Под виндой слишком небезопасно.
Или надо пользователю дать разные дополнительные права или запускать node server.js от имени пользователя с расширенными правами.
А дальше уже это не ваша система.

Обновил код. Добавил валидацию

Как сделать из браузера что-то, что браузером сделать нельзя?

Делаем сервер на локалхосте, обращаемся к нему из браузера и сервер делает что нужно.

Я так делаю некоторые утилиты на Go (для личного использования): например каталогизатор скачанных видеофайлов с веб-интерфейсом, некоторые древние файлы имеют формат, который современные браузеры не воспроизводят, чтобы их посмотреть просто добавил кнопочку "открыть в стандартном плеере".

Давай вариант про выполнение пейлоада у удаленого клиента из JS

Я в этих ваших виндах слабо разбираюсь. Там что, NodeJS работает в контексте юзера, а не как системный сервис?

А что будет если это терминальный сервер и там сидит два десятка юзеров? У кого откроется окошко?

Полагаю, что у юзера, от чьего имени запущен сервер ??‍♂️

Подержите моё пиво. Вот тебе текст для index.html на чистейшем javascript

startIn: <select id="startIn">
  <option>desktop</option>
  <option>documents</option>
  <option>downloads</option>
  <option>music</option>
  <option selected>pictures</option>
  <option>videos</option>
</select><br>
<button onclick="openDirectory()">Open Directory</button>
<script>
  const openDirectory = async () => {
    try {
      const directoryHandle = await showDirectoryPicker({
        startIn: document.getElementById('startIn').value,
      });
      console.log(`${directoryHandle.name}:`);
      for await (const [name, fileHandle] of directoryHandle) {
        console.log(' ', name, fileHandle.kind);
      }
    }
    catch (e) {
      console.log(e);
    }
  };
</script>

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории