0

引数を使用してPHPを介してshファイルを起動しようとしていますが、これをまったく機能させることができません:

<?php
$ip = $_GET['ip'];
$port = $_GET['port'];

echo shell_exec('sh var/www/html/Grant73565/Grant.sh $ip $port')or die("bash didn't work");
echo('Sent!');
?>

ssh を介して手動でファイルを実行すると、次のように正常に動作します。

./Grant.sh 127.0.0.1 80

ただし、php では「Bash が機能しませんでした」と表示されるだけです。

私が知る限り、引数なしでファイルを起動することすらできないので、引数とは関係ありません。

4

1 に答える 1

1

変数を含める場合は、二重引用符を使用する必要があります。

echo shell_exec("sh var/www/html/Grant73565/Grant.sh $ip $port") or die("bash didn't work");

現在のコードでは、誰でも http クエリを変更して、サーバー上で何でも実行できます。これは重大なセキュリティ ホールです。

解決策は、入力を検証することです。ポートは常に数値なので簡単です。正規表現を使用して IP アドレスを確認できます。

于 2012-12-06T20:18:42.213 に答える