Защита клика после установки в Интернете - PullRequest
3 голосов
/ 20 июня 2011

На моем сайте есть ссылка на стандартную страницу публикации, созданную Visual Studio.Меня беспокоит то, что если кто-то узнает URL этой страницы, он может загрузить мое программное обеспечение.Конечно, я могу защитить паролем страницу с помощью ссылки, но она все равно не защитит URL-адрес загрузки.Есть ли способы обеспечить клик после загрузки?Я оглянулся вокруг, и мне кажется, что я застрял в этом смысле.

1 Ответ

3 голосов
/ 06 июля 2011

Общедоступный URL-адрес является проблемой безопасности в развертывании ClickOnce. Тем не менее, есть решение вашей проблемы, если на вашем веб-сервере установлены Windows и .NET. Скажите, есть ли у вас? Мне придется придумать другой обходной путь для веб-сервера Linux на тот случай, если он у вас есть.

Brief

Во-первых, немного информации о развертывании ClickOnce. При развертывании приложения выполняются запросы GET на сервере (при условии, что WebDir - это каталог публикации на сервере)

G-1. GET /WebDir/setup.exe (начальная загрузка)
G-2. GET /WebDir/MyApp.Application (setup.exe -url request)
G-3. GET /WebDir/MyApp.Application (URL-запрос поставщика развертывания приложения.)
G-4. GET /WebDir/Application Files/MyApp_1_0_0_0/MyApp.exe.manifest (запрос манифеста приложения)
G-5. GET /WebDir/Application Files/MyApp_1_0_0_0/MyApp.exe.deploy
и другие файлы .deploy ... (запросы файлов приложений)

Осуществление

Теперь решение состоит в том, чтобы перехватывать эти запросы файлов на сервере. В IIS вы можете присоединить пользовательский HTTPHandler и обработать запрос. В Apache вы можете перенаправлять запросы в код PHP с помощью файлов .htaccess. Кроме того, вам нужно будет сгенерировать уникальный идентификатор uid для клиентских экземпляров, загруженных с сервера (может быть вашим лицензионным ключом), и указать его в параметрах запроса URL-адреса поставщика развертывания.

Структура каталогов

Создайте папку "Application" внутри вашего WebDir и ограничьте доступ к /WebDir/Application/. Остальное все может быть внутри /WebDir/

Запрос файлов

Итак, вот что вы делаете на веб-сервере Apache, размещенном на компьютере с Windows:

  1. Создайте пользовательскую страницу загрузки или используйте страницу, созданную при публикации приложения с помощью Visual Studio (но вам придется редактировать ее вручную!). Давайте предположим, что страница /WebDir/Download.php

  2. После аутентификации пользователя с Download.php вы должны отправить setup.exe из своего кода (можно сделать с помощью readfile() в PHP) пользователю. Тем не менее, улов загрузки (setup.exe) после установки сделает запрос GET [G-2]. Не забудьте сейчас, что вы должны проверить этот файл запроса. Таким образом, в основном вы изменяете свойство "setup.exe -url" на uid перед возвратом файла. Например, измените его на /WebDir/uid/MyApp.Application [G-2]. Вы можете использовать MsiStuff.exe , чтобы изменить свойство URL для загрузчика.

  3. Используя файл .htaccess, переписать [G-2] в /WebDir/Handler.php?user=uid. Начиная с Handler.php, вы можете проверить, является ли он действительным uid. Если он действителен, вам нужно будет включить uid в URL поставщика развертывания и «Путь к зависимым сборкам» в манифесте развертывания, чтобы в случае поступления запроса на обновление (по сути, он запрашивал манифест развертывания), вы могли проверить пользователя там. тоже. Добавьте uid к параметрам строки запроса. Например, измените его на /WebDir/MyApp.application?user=uid [G-3]. Не забывайте, что вам придется отказаться от манифестов, как только вы измените их. Для этого используйте Mage или напишите собственный код.

Итак, наконец, запросы GET на сервере будут (при условии uid = 1f3rd)

G-1. GET /WebDir/Download.php
Действие: возврат setup.exe с измененным -url
G-2. GET /WebDir/Application/setup.exe/1f3rd/MyApp.Application
Действие: перенаправление, проверка пользователя, изменение URL, повторная подпись и возврат файла
G-3. GET /WebDir/Application/setup.exe/MyApp.Application?user=1f3rd
Действие: перенаправить, проверить пользователя и вернуть файл
G-4. GET /WebDir/Application/1f3rd/Application Files/MyApp_1_0_0_0/MyApp.exe.manifest
Действие: перенаправить, проверить пользователя и вернуть файл
G-5. GET /WebDir/Application/1f3rd/Application Files/MyApp_1_0_0_0/MyApp.exe.deploy
и другие файлы .deploy ...
Действие: перенаправить, проверить пользователя и вернуть файл

Плюсы

  1. Приложение успешно развернуто и обновлено только , если во всех запросах указан действительный uid в URL-адресе.
  2. Теперь вы можете идентифицировать различные экземпляры приложения в клиентских системах. Вы можете отслеживать историю обновлений, делать выборочное обновление / понижение версии и многое другое!

против

  1. Для реализации описанного выше вам потребуется сервер Windows, так как вам нужен mage.exe | Ваше собственное приложение для подписи кода .NET и Msistuff.exe.
  2. У вас могут быть незначительные проблемы с производительностью, так как вы выполняете проверку для каждого запроса файла. Вы можете пропустить проверку при запросах файлов .manifest и .deploy.
  3. Вы должны будете обеспечить надлежащую безопасность сертификата компаний, который будет присутствовать на веб-сервере для подписи (Вы можете сохранить его в локальной файловой системе сервера, если у вас есть полный сервер для себя. В этом случае это хорошо, если кто-то не врывается в саму машину!)

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

Я напишу подробную статью о CodeProject, если у меня когда-нибудь будет свободное время.

...