2010-12-07 20 views
2

これは私が最後の1時間に持っていたかなり奇妙な経験です。
私はデータフォルダに「USA」という名前のファイルがあり、選択
$fileName = "../data/".$_POST["file"];
$fh = fopen($fileName);


によって制御されているデータソースを持っていると言います。 selectオプションが起動すると、jQueryはこれをPHPファイルに送り、適切なファイルを開き、適切な内容をファイルから取り出して別のselect文に入れます。これは動作しません(ストリームのエラーが発生するオープン失敗)しかし、それは奇妙な部分ではありません。奇妙な部分は、私は、このような...

$fileName = "../data/USA";
$fh = fopen($fileName);


として絶対名を使用するのではなく、ポスト場合、私はまた、$ _POST [ "ファイルは、"] "USA"

+2

$ _POST ["file"]に許可する値があることを確認し、そうでない場合はスクリプトを停止してください。それをいくつかのディレクトリに貼り付け、ファイル機能で使用するだけでセキュリティ上の脆弱性が生じます。誰かが$ _POST ["file"]値 –

+0

として既に../../../system_file_youd_rather_not_make_publicのようなものをあなたに送るかもしれないと想像してください。混乱する部分はどちらですか? – Michael

+0

var_dumpを試しましたか($ _ POST ["file"]);そして...そのファイルには拡張子が必要です...? –

答えて

2
$file = trim($_POST["file"]); 
$fileName = "../data/".$file; 
$fh = fopen($fileName, "r"); 
+0

ああ、私もそうしています。コードのコピーと貼り付けはしていませんでした。 – Michael

+0

更新しました。あなたの$ _POST ["file"]は余分なデータを持っているようです。トリムは周囲のスペースを削除する必要があります。 var_dump()を使って$ _POST ["file"]にあるものも正確にチェックしてください。 – tHeSiD

+0

また、データをPHPファイルに渡すhtmlコントロールを投稿してください。ソースを見るとわかりやすくなります。 ;) – tHeSiD

0
Infactはしたことが確認されました私はあなたの例ではいずれも表示されない

<select name="file"> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
     <option value="4">4</option> 
     <option value="5">5</option> 
    </select> 

<select>は名前を持っている必要があります。 $_POST['file']は、<option value="1">の値を取得します。

まだ動作しない場合は、var_dump($_POST["file"]);を追加して、そこにあるものを参照してください。 string(1) "USA"

関連する問題