-2

私は次のURLを持っています:

http://www.solutionssoftwarematrix.com/download.php?filename=CreatingandMarketingthePerfectYouTubeVideo.zip

誰かが上のリンクをクリックしたときに、文字列変数をPHPスクリプト(下)に渡そうとしています。

スクリプト(download.php)は次のとおりです。

http://www.devshed.com/c/a/PHP/Simple-and-Secure-PHP-Download-Script-with-Limits-Tutorial/1/

下の太字の領域は、$_GET関数が追加されている場所ですが、解析エラーが発生し続けるか、ファイル名が取得されず、ダウンロードが機能しません。

header("Content-type:application/pdf");
header('Content-Disposition: attachment;filename="http://www.yourdomain.com/ebookfordownloads/$_GET['$filename']"');

readfile("/your/absolute/server/path/html/ebookfordownloads/$_GET['$filename']");


header("Content-type:application/pdf");
header('Content-Disposition: attachment; filename="http://www.yourdomain.com/ebookfordownloads/$_GET['$filename']"');
readfile("/your/absolute/server/path/html/ebookfordownloads/$_GET['$filename']");
4

3 に答える 3

1

複数の問題があります:

  • この構文は無効です: ...文字列を閉じる'$_GET['$filename前のアポストロフィ。'$filenameおそらくやりたいことはdownloads/' . $_GET[$filename]-連結です
  • この構文も無効です"downloads/$_GET['$filename"。-引用符で囲まれた文字列の配列アクセスでは、アポストロフィを使用できません。繰り返しますが、連結は最善の策です。"downloads/" . $_GET[$filename]
  • あなたが欲しい$_GET['$filename']のか、$_GET[$filename]それとも$_GET['filename']。3つの間に非常に重要な違いがあります。
  • ユーザーがなんらかの方法で設定できる場合$filename(または、filenameそれを使用する場合はgetパラメーター)、コードには大きな脆弱性があります。
于 2012-11-12T15:56:07.277 に答える
1

基本的なPHP文字列機能を取得していません。このような変数を追加するには、次を使用する必要があります。

readfile("/your/absolute/server/path/html/ebookfordownloads/{$_GET['$filename']}");

またはそれらを連結します:

readfile("/your/absolute/server/path/html/ebookfordownloads/".$_GET['$filename']);

$_GETコードでユーザー入力(変数)を逐語的に使用する場合の非常に大きなセキュリティホールは言うまでもありません。与えられた情報を使用する前に検証を行ってください。

于 2012-11-12T15:56:21.150 に答える
0

これがどうあるべきかを考えてみましょう。

header("Content-type:application/pdf");
header('Content-Disposition: attachment;filename="http://www.yourdomain.com/ebookfordownloads/' . $_GET['filename'] . '"');


readfile("/your/absolute/server/path/html/ebookfordownloads/" . $_GET['filename']);


header("Content-type:application/pdf");
header('Content-Disposition: attachment; filename="http://www.yourdomain.com/ebookfordownloads/' . $_GET['filename'] . '"');
readfile("/your/absolute/server/path/html/ebookfordownloads/" . $_GET['filename'] );

PHPでの文字列の連結を見てください。

また、:URLで$_GET['$filename']すべてを取得するようにPHPに要求していることを意味します。?$filename=ただし、URLには$filenameパラメータがなく、だけfilenameなので、に変更する必要があります$_GET['filename']$filenameまたは、次のように呼び出される変数にパラメータの名前が格納されている場合は、次のよう$filename = 'filename'に変更する必要があります。$_GET[$filename]

于 2012-11-12T16:03:15.730 に答える