Правильный способ запуска Shell / Ruby / другого кода на сервере из HTML-формы - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть общий хостинг с Bluehost. У меня есть SSH доступ к блоку CentOS, и поэтому я могу запускать команды CLI. У меня также есть простой способ публиковать статические веб-сайты, по сути, сохраняя их в именованный каталог под ~/public_html. Они работают на Apache.

Теперь есть несколько действий (скриптов для запуска), которые я хотел бы запустить на своем сервере и чтобы иметь возможность запускать их по требованию из любого места. Запуск их с веб-страницы кажется наиболее подходящим / удобным. Мне не нравится PHP, и я не опытный в этом, поэтому я хотел бы запускать команды в Bash или Ruby. Сначала я попробовал что-то вроде:

<form method="post" action="./my-bash-script.sh">
  <label>First:</label>
  <input name="first"/>
  <label>Second:</label>
  <input name="second"/>
  <button>Send</button>
</form>

Это не сработало. Он не выполнил сценарий на сервере и загрузил его. Поэтому я попробовал ту же форму, но изменил action="./my-bash-script.sh" на action="./my-php-script.php", который состоял из:

<?php
$first = $_POST['first'];
$second = $_POST['second'];

system('./my-bash-script.sh ' . escapeshellarg($first) . ' ' . escapeshellarg($second));
?>

Это сработало. Итак, у меня есть рабочее решение, и мой вопрос - , если я поступаю правильно, учитывая, что я не хочу вносить изменения в сервер, на котором работают мои сайты . В частности:

  1. Прав ли я, предполагая, что у меня есть , чтобы сделать это таким образом (используя PHP для вызова моего сценария, никогда не вызывая сценарий напрямую)?
  2. Является ли мой PHP-скрипт правильным / безопасным / эффективным? Под этим я подразумеваю, используется ли system с escapeshellarg и . ' ', связывающими аргументы, правильным способом избежать этого, избегая возможных эксплойтов?
  3. Стоит ли беспокоиться о разрешениях скриптов PHP и Shell? Я изменил первый на 600, а второй на 700.
  4. Как можно получить код завершения сценария stdout и stderr в сценарии PHP (чтобы я мог вернуть соответствующее сообщение на страницу)?
  5. Что-нибудь еще, что я должен знать?
  6. Вы бы порекомендовали другой метод? Помните, что для установки необходимо обеспечить низкое трение, как это было.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...