хорошо, это, вероятно, больше шагов, чем необходимо. У меня есть HTML-страница, которая запрашивает 2 даты (начало и конец). Я хочу, чтобы она принимала эти даты и отправляла их в файл PHP, который затем запускал скрипт, используя эти даты в качестве переменных.
Главная страница:
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
<title>Calendar lookup </title>
</head>
<link href = "stylesheets/common.css" type = "text/css" rel = "stylesheet">
<body>
<h1>Calendar Date Range</h1>
<form method = "post" action = "run_script.php">
Start Date YYYY-MM-DD: <br />
<input type = "text" name = "Start_Date" size = "35" />
<br />
End Date YYYY-MM-DD: <br />
<input type = "text" name = "End_Date" size = "35" />
<br /> <br />
<input type = "submit" value = "Submit" />
<br />
</form>
</body>
эта страница должна передавать даты моему php-файлу-run_script.php:
<?php
$Start_Date = $_POST['Start_Date'];
$End_Date = $_POST['End_Date'];
exec (sudo sh "gather.sh $Start_Date $End_Date ");
?>
тем не менее, кажется, что это вовсе не запуск сценария сбора. когда я нажимаю кнопку отправки, я перехожу на пустую страницу /run_script.php и никогда не запускаю collect.sh (я проверяю, куда он должен сбрасывать данные, ничего не появляется)
Я знаю, что скрипт работает нормально, если я запускаю sh collect.sh, он делает то, что мне нужно, просто нужно получить этот PHP-файл, чтобы запустить его для пользователей.
Есть предположения? или это просто совершенно неправильный способ сделать это?
Как указал Эд, в PHP есть гигантская уязвимость. так что это неправильный путь.
предложения по другому пути приветствуются.
Пожалуйста, не размещайте этот код нигде; он имеет гигантскую уязвимость для инъекций. Любой, кто имеет доступ к файлу PHP в браузере, может использовать его для запуска произвольного кода на вашем компьютере.
Не говоря уже о синтаксической ошибке php. PHP понятия не имеет, что такое sudo sh. Вы должны передать это в строку "sudo sh gather.sh $Start_Date $End_Date "
Ах хорошо! @EdCottrell все внутри, без внешнего доступа.
@stcoyle Тем не менее, принцип таков: никогда не пишите код, который, как вы знаете (или должны знать), небезопасен. Код, который предназначен только для внутреннего использования, — это тот же самый код, который, вероятно, будет повторно использован в общедоступном контексте через шесть месяцев или год и полностью взломает ваш сервер. И это при условии, что вы случайно не опубликуете это раньше. Предположим, что он доступен для вашего злейшего врага.
@stcoyle, почему бы не использовать PHP и что-то вроде mysql или обычного текста для хранения дат, а затем анализировать их из обычного текстового файла с помощью PHP
@DerekPollard да, я думаю, что это, вероятно, будет конечным результатом, который, вероятно, будет совсем другой проблемой, ха-ха
По крайней мере, вы должны проверить, что полученные значения действительно являются датами и находятся в ожидаемом диапазоне.
Помимо зияющей уязвимости безопасности и неправильного использования exec, вы можете убедиться, что пользователь, под которым работает PHP, действительно имеет правильные разрешения. Скорее всего, это www-data, и это очень ограничено в отношении выполнения произвольных команд. Если вы В самом деле знаете, что делаете, вы можете добавить www-data к sudoers — если вы действительно не знаете, каковы последствия этого: не делай этого.






Должно быть
sudo sh gather.sh "$Start_Date $End_Date"