0

$_POST と $_GET で深刻な問題が発生しています。私はphpが初めてです。1週間前に始めたばかりです。

アクションのためにphpを呼び出すhtmlフォームがあります。

<html><body>
<form action="ls_sample1.php" method="post">Submission ID: <input type="text" name="sub_id" />
<input type="submit"/></form>
</body></html>

sub_idを取得してシステムコマンドを実行するphpがあります

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
?>

<?php
$input = $_POST['sub_id'];
echo "Entered submission id is $input";
system('/auto/ash/g2k/bin/gt -F stat -s $input',$ret);
if($ret) {
 echo "its invalid input because return value is $ret";
}
?>

上記のコードにあるコマンドは無視してください。他の UNIX コマンドと同じです。シェルで実行すると、すべて正常に動作し、戻り値は 0 になります。ブラウザで実行すると、戻り値は 1 で、何も実行されません。ただし、提出 ID は php に渡されます。

ブラウザー出力: 入力された送信 ID は 0000268801 です。戻り値が 1 であるため、無効な入力です

私はここに何か欠けていますか?? 助けてください。

4

1 に答える 1

4

だから...いいえ。これをしないでください。

入力フィールドに次のものが含まれるフォームを誰かが送信した場合:

 ; rm -rf ~/ #

それからあなたは問題を抱えています。また、すべてのファイルを削除するよりもはるかに悪意のあるものになる可能性があります。

escapeshellargを見てください。

あなたのエラーをWRT:

戻りコード 1 は通常、一般的な (特定されていない) エラーを示します。ときどき、PHP が役立つ情報をエラー ログに記録します。Apache ユーザーが実際にこのプログラムを実行する権限を持っていること、および php.ini ファイルに干渉しているものがないことを確認できます。

単純な解決策のすべてに失敗した場合、私が行うことはstraceApache インスタンスであり、何が起こるかを確認します。これは少し高度ですが、ツールの使い方を知っていれば、非常に重要です。Apache ワーカー プロセスが 1 つだけになるように一時的に Apache 構成を変更し、strace でアタッチして、出力をファイルにダンプします。次に、ファイルで実行可能ファイルの名前を検索し、そこから実行チェーンをたどります。最終的にエラーに遭遇し、それが何であるかを確認します。出力ファイルを設定したり、タイムスタンプを追加したり-sする strace オプション (文字列を切り捨てる場所を制御する) にも注意を払う必要があります。-w-t-tt

そのすべてを行う方法を説明するように私に頼まないでください。それにはページが必要です。

于 2012-10-24T20:56:23.907 に答える