Как заставить PHP вызывать скрипт оболочки? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть страница generate.php

<?php
exec("./script $ip");
?>

Я убедился, что переменная $ ip правильно извлекает URL-адрес.Когда он перенаправляет на эту страницу, он не запускает скрипт.Я также попытался проверить, что скрипт работает для пользователя Apache, и это делает.

su -s /bin/sh apache -c "./script 1.1.1.1"

Код, который устанавливает IP-адрес из моей страницы index.html, выглядит следующим образом:

<form action="generate.php">
  <input type="text" name="ip" />
  <input type="submit" />
</form>

Когда я ввожу IP-адрес в поле и нажимаю "Отправить", он действительно приводит меня к http://example.com/generate.php?ip=1.1.1.1

Что-то не так с тем, как я вызываю скрипт оболочки?Любой вклад будет принят с благодарностью.

Спасибо за весь ввод, оказался просто selinux.Отключение selinux решило эту проблему.Поскольку это не система, подключенная к сети, отключение selinux не является проблемой.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

su -s / bin / sh apache -c "./script 1.1.1.1"

Вы выполняете скрипт с правами суперпользователя.Попробуйте выполнить скрипт со своим пользователем и посмотрите результаты.Возможно, вам нужно добавить разрешения для файла.

Также по умолчанию функция exec отключена из соображений безопасности.Вы можете попробовать отредактировать файл конфигурации.

Также будет полезен файл журнала ошибок php.

Кроме того, идея в целом действительно плохая.Выполнение сценариев оболочки с параметрами из GET или POST может привести к плохим вещам ...

0 голосов
/ 04 октября 2018

Вы можете попробовать это:

<?php
if (isset($_GET['ip'])) {
    exec('./script ' + $_GET['ip']);
} else {
    exec("./script $ip");
}

Здесь вы будете использовать ip с URL (например: http://example.com/generate.php?ip=1.1.1.1), если он указан, в противном случае вы будете использовать предыдущую реализацию.

...