Особливості запуску зовнішніх команд з asp-сторінок

Особливості запуску зовнішніх команд
з ASP-сторінок

Active Server Pages

Програмний код, що знаходиться між <% и %>, виконується на сервері і підпорядкований синтаксису одного з обраних мов. Весь інший код є HTML-сторінку в явному вигляді.

Лістинг типовий ASP-сторінки виглядає наступним чином:

<%@ Language=VBScript CODEPAGE=1251%>

заголовок сторінки

Response.write variable 'відображення на екрані вмісту змінної

Після обробки інтерпретатором IIS програмного коду і перетворення результатів його роботи в HTML / DHTML необхідно дати команду на відображення сторінки в браузері клієнта. Такою командою є Response.Write q, де q - ім'я змінної, що містить фрагмент HTML-коду.

Методи запуску додатків з VBS

Розглянемо виклик додатків безпосередньо з файлу VBS, для цього можна використовувати один з методів - Run або Exec. Необхідно відзначити, що в VBScript не існує функції, за допомогою якої можна запустити програми, однак вона існує в WSH, який підтримує VBSscipt і JScript. Створення екземпляра об'єкта WSH здійснюється за допомогою команди Create Object ( "WScript.Shell").

Set Wshell = CreateObject ( "Wscript.shell")

Set Proc = Wshell.Exec ( "application.exe")

"Чекати, поки не завершиться виконання програми

Do While Proc.Status = 0

Set Wshell = Nothing

Set Wshell = CreateObject ( "Wscript.shell")

Set Proc = Wshell.Run ( "application.exe")

Set Wshell = Nothing

Для успішного запуску різних додатків з ASP-сторінки необхідно враховувати деякі особливості, про які йтиметься нижче. Всі додатки можна умовно розділити на кілька груп:

  • додатки з графічним інтерфейсом;
  • додатки, що працюють з командного рядка (command lines utilities);
  • скрипти на VBS / Jscript (хоча скрипти на VBS відносяться до додатків, що запускаються з командного рядка, виділимо їх в окрему групу).

Перша особливість: оскільки код ASP-сторінок виповнюється на сервері, і тільки результат у вигляді HTML-сторінки пересилається на клієнтську машину, то для успішного запуску програми на сервері, користувач повинен володіти відповідними правами. IIS є триланкову систему.

Нехай IIS має стандартні параметри. В цьому випадку при завантаженні будь-ASP-сторінки вона стартує від імені вбудованого користувача (див. Рис. 2). Якщо сторінка працює з якимись базами даних, наприклад з Active Directory, то користувач, який запускає дану сторінку повинен володіти правами адміністратора. Існує кілька способів виконати ці умови. Перший - замість облікового запису вбудованого користувача прописати ім'я облікового запису адміністратора мережі. При такому розкладі будь-який користувач в мережі зможе відвідати дану сторінку, тому що вона буде запускатися від імені системного адміністратора. Цей спосіб надає всім доступ до даної сторінки, що, погодьтеся, неправильно. Це ще півбіди. Головне, що таким чином різко знижується безпеку всієї системи. У разі помилок на сторінці зловмисник запросто запустить шкідливий код з правами адміністратора. Тому пропонується інший спосіб вирішення проблеми, за допомогою якого можна обмежити доступ до ресурсів. В налаштуваннях IIS необхідно скинути прапорець (див. Рис. 2) з Enable anonymous access і встановити його навпроти Basic Authentication. Також слід змінити права на файлову структуру використовуваного сайту, виключивши звідти групу Everyone і додавши відповідну групу безпеки. При такій настройці IIS тільки системні адміністратори отримають доступ до даної сторінки. При спробі будь-якого користувача, який не є адміністратором мережі, отримати доступ до сторінки IIS будуть запитані ім'я і пароль користувача.

Якщо необхідно розширити коло осіб, яким повинен бути доступний даний сайт, і при цьому користувачі не є системними адміністраторами, то можна скористатися варіантом, що є синтезом двох раніше викладених рішень: обмежити доступ на сайт за допомогою Basic Authentication і правами на файлову структуру, запускати скрипт , інкапсульований в сторінку з правами адміністратора.

Тільки що ми розглянули механізм взаємодії першого і другого ланки в триланкової системі. Першою ланкою є робоча станція користувача, другим - сервер, на якому встановлений IIS. Взаємозв'язок цих ланок здійснюється за допомогою одного користувача. Між другим і третім ланкою (сервер IIS, процеси, породжувані з ASP) взаємодія здійснюється за допомогою іншого користувача. Розглянемо взаємодію другого і третього ланки докладніше.

При запуску з коду ASP-сторінки будь-якої програми здійснюється взаємодія між другим і третім ланкою. IIS породжує процес, що запускається від імені іншого вбудованого користувача. Оскільки ASP-сторінка виконується на сервері, то для запуску програми необхідні відповідні права. Управління цим обліковим записом користувача здійснюється в Application Tools (див. Рис. 3).

Такою є перша особливість, що стосується абсолютно всіх додатків. Існує друга, також характерна для всіх додатків.

Запуск програми c графічним інтерфейсом

Запуск програми здійснюється з використанням одного з вищеописаних методів (див. Приклади 2, 3). Єдиною особливістю є необхідність вказувати повний шлях до запускається з додатком. Шлях може бути як локальним, наприклад, C: Folder1. так і мережевим: ServerC $ Folder1.

Запуск програми з командного рядка (command line utility)

Як додаток може бути програма, яка запускається з командного рядка (command-line utility), додаток для Windows (файл з розширенням EXE).

Розглянемо особливості запуску command-line-додатків з ASP-сторінок. Синтаксис команди запуску утиліти з командного рядка наступний:

% Comspec% / c cmd_util.exe

Префікс% comspec% / c є обов'язковим. Мінлива оточення% comspec% вказує на C: Windows System32cmd.exe. Оскільки при запуску зовнішньої команди породжується процес CMD, то після відпрацювання команди його необхідно закрити. Ця процедура здійснюється за допомогою ключа / c. Якщо процеси не закривати, то в кінці кінців виникне нестача пам'яті на сервері, що призведе до істотного зниження швидкості його роботи, а згодом до відмови функціонування різних служб компонентів. Шлях до утиліти також необхідно писати повністю. Допускається використання мережевих імен в форматі UNC (ServerShare.).

Запуск VBS-файлів з скрипта

Бувають ситуації, коли необхідно з ASP-сторінки запустити зовнішній VBS-скрипт. Як правило, він запускається з параметрами. Розглянемо шматок лістингу VBS-скрипта, що стосується читання його зовнішніх параметрів.

Читання параметрів засноване на використанні властивості Arguments об'єкта WScript WSH. Наведемо приклад, який визначає, з якими параметрами був запущений скрипт:

t = "Кількість заданих параметрів -" Wscript.Arguments.Count chr (13) "Параметри:" chr (13)

For Each arg in objArgs

t = t arg chr (13)

Читання значень елементів масиву, що містить аргументи скрипта, можна здійснювати іншим способом. Обидва варіанти дають один і той же результат.

Тому його вибір залежить від пристрастей програміста. Відзначимо лише, що перший варіант компактніше. Однак, якщо необхідно використовувати нумерацію об'єктів, то другий варіант виявиться вдаліше, оскільки в першому доведеться вводити додатково лічильник:

t = "Кількість заданих параметрів -" Coun chr (13) "Параметри:" chr (13)

For i = 0 to Coun-1

t = t i + 1 ":" objArgs (i) chr (13)

Іноді необхідно отримати значення певного аргументу. Це проілюстровано в прикладі 6. Необхідно пам'ятати, що нумерація елементів починається з 0:

Msgbox objArgs (2) "Читання третього аргументу.

Наведений приклад не є зразком програмування, оскільки в прикладі відсутня обробник помилок.

Передбачення можливих помилок, імітація найпростішого інтелекту у програми є хорошим тоном в програмуванні. Тому створимо для цього прикладу обробник помилок. У даній ситуації помилка виникає в тому випадку, якщо здійснюється читання неіснуючих параметрів.

q = InputBox ( "Введіть номер зчитує аргументу", "Читання номера аргументу") - 1

if q> Coun then

При використанні BAT-файлів необхідно пам'ятати, що окремий процес породжується не тільки в момент запуску такого типу файлів, але і при виконанні кожної з команд, що знаходяться всередині нього. З тієї ж самої причини не варто виконувати взаємопов'язані команди, оскільки може скластися ситуація, коли перша ще не встигла відпрацювати, а друга, що міститься в наступному рядку і використовує результат роботи першої команди, вже почала виконуватися. В результаті відбудеться помилка. Щоб уникнути цього, викликайте команди з коду ASP-сторінки і здійснюйте перевірку результату відпрацьованої команди.

Підводячи підсумок, коротко відзначимо, що при роботі з зовнішніми файлами з ASP-сторінок необхідно враховувати особливості роботи IIS. Сподіваюся, що прочитавши цю статтю, у програмістів не буде проблем з запуском додатків з ASP-сторінок.