Запуск программы из браузера

Общеизвестно, что стандарты безопасности сильно ограничивают взаимодействие сервера с клиентской машиной через браузер. Когда возникает необходимость такого взаимодействия, приходится использовать либо недокументированные функции какого-то определенного браузера (фактически, "дыры" в безопасности, которые разработчики имеют обыкновение устранять), либо расширения и плагины, специально разработанные для этого.
Однако, мы не можем быть уверены в том, что посетитель использует именно нужную нам старую версию браузера с "дырой", и не можем заставить его установить какие-то плагины. Ясно, что в идеале хотелось бы обойтись без этого.
Когда у меня возникла необходимость запуска программы на клиентской машине с определенными параметрами, переданными в командной строке, а именно игру Ил-2 в режиме соедиения с сервером на сайте Запасной Аэродром, я поступил следующим образом:
Я создал панель, которая передавала необходимые параметры на отдельную, специально для этого созданную страницу методом POST, открывая при этом ее в новом окне. Код формы внутри панели был примерно таков (я выбросил лишнюю логику не относящуюся к делу, могу потом подробнее рассказать, если кому-то интересно):
echo "<form action='".INFUSIONS."il2servers_panel/il2connect.php' target='_blanc' method='post'>\n";
echo "<input type='hidden' name='server_ip' value='".$servers['server_ip']."'>\n";
echo "<input type='hidden' name='server_port' value='21000'>\n";
echo "<input type='hidden' name='pilot_name' value='".$userdata['user_name']."'>\n";
echo "<input type='hidden' name='game_path' value='".$gamePath."'>\n";
echo "<input class='button' type='submit' name='connect' value='".$locale['il2_605']."'".IL_STYLE."'>\n";
echo "</form>\n";
Путь к программе, в данном случае к игре, я прошу пользователя ввести в его профиль заранее. Это просто полный путь к исполняемому файлу, включая имя диска и все прочее. В коде он фигурирует под именем
$gamePath.
Форма отсылает данные на страничку с таким кодом:
<?php
if ( isset ($_POST['connect']))
{
header('Content-type: application/cmd');
header('Content-Disposition: attachment; filename="il2connect.cmd"');
echo "\"".stripslashes($_POST['game_path'])."\" ".$_POST['server_ip'].":".$_POST['server_port']." -name ".$_POST['pilot_name'];
}
?>
В результате сервер отсылает браузеру командный файл! Который пользователь может сохранить или запустить! И если он выбирает "запустить", то, вуаля - процесс пошел. Запускается указанная им ранее в профиле программа, с параметрами переданными с сервера.
Конечно, на стороне сервера не видно, что именно указал в путях пользователь и не пользуется ли он этой формой, чтобы запускать например "блокнот" вместо Ил-2, но нам это и не важно, для собственного удобства пользователь укажет правильный путь. Ну, а если нет, то нам не жалко: не хочешь не играй, или соединяйся "вручную".
Пользователям Linux (к числу которых принадлежу я сам) можно отправлять командный файл .sh, чтобы предоставить им тот же сервис.
Добавить комментарий
Рейтинги
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

