0

これは私のコードです:

$ost=$_GET['id']; //get the ID from the URL
$path = "audio/soundtracks/$ost"; //use the ID to select a path

// Open the folder
$dir_handle = @opendir($path) or die("Unable to open $path");

// Loop through the files
while ($file = readdir($dir_handle)) {
if($file == "." || $file == ".." || $file == "index.php" )
    continue;
    echo "<a href='$path/$file'>$file</a><br />"; //return the name of the track
}

// Close
closedir($dir_handle);

その目的は、ディレクトリに含まれるすべてのサウンド トラックを自動的に一覧表示することです。ディレクトリの名前は、URL を介して渡された ID によって指定されます。各トラックは、"### - title.mp3" の形式で名前が付けられます (例: "101 - Overture.mp3")。

正常に動作しますが、結果のリストは何らかの理由でランダムにソートされます。トラックをタイトル順に並べ替える方法はありますか? また、私は PHP の初心者ですが、GET 関数にセキュリティ上の問題はありますか? 前もって感謝します。

編集: GET はパスを指定するためにのみ使用され、データベースと対話することは想定されていません。これは攻撃を防ぐのに十分ですか?

$ost = $_GET['id']; 
$bad = array("../","=","<", ">", "/","\"","`","~","'","$","%","#");
$ost = str_replace($bad, "", $ost);
$path = "audio/soundtracks/$ost";
4

2 に答える 2

1

GET パラメータを使用する前に、いくつかのチェックを行ってください。チェックのように、数値、右の長さなどです。また、db に対して使用する場合は msyql_real_escape_String です。

ディレクトリをループするとき、ファイルを php の配列に保存し、タイトルをインデックスにします。このように、好きなように並べ替えることができます:

while ($file = readdir($dir_handle)) {
if($file == "." || $file == ".." || $file == "index.php" )
    continue;
    $array[$file] = "<a href='$path/$file'>$file</a><br />"; //return the name of the track
}

並べ替え ($配列);

...この後、配列をループして個別に出力します。

最初に配列にループしてから、別々に印刷する方が良いコーディング方法です...私の目には。より柔軟です。

于 2013-07-14T12:46:02.277 に答える
0

長さのチェックと $_GET でのエスケープ文字列セキュリティ対策の使用とは別に、ID を URL にエンコードおよびデコードし、使用する前に をデコードすることもできます。

//before putting into URL

 $id = $rows["id"];
$id = base64_encode($id);
<a href="yourUrl.php?id='$id'"

//in yourUrl.php

$id = $_GET['id'];
     $id =  base64_decode($id);
于 2016-10-28T06:41:08.013 に答える