私のプロジェクトでのダウンロードは、PHPダウンロードスクリプトとセッション認証によって保護されています。
TCPDFの生成では、file_get_contentsと以下のスクリプトを使用して、画像を取得し、PDFを生成します。
stream_context_createはヘッダーPHPSESSIDを送信しますが、認証はまだありません。
pdfexport.php:
$opts = array( 'http'=>array( 'method'=>"GET",
'header'=>"Accept-language: de\r\n" .
"Cookie: ".session_name()."=".session_id()."\r\n" ) );
$context = stream_context_create($opts);
session_write_close();
foreach($data['we_files'] as $we_file){
$getimage1 = file_get_contents( URLROOT . "/file.php?path=" .$we_file->image, false, $context);
$image1_name = tempnam("/tmp", $we_file->image);
file_put_contents($image1_name, $getimage1);
$image1_image = new Imagick($image1_name);
$image1_image->setImageCompression(imagick::COMPRESSION_JPEG);
$image1_image->setImageCompressionQuality(100);
$image1_image->thumbnailImage(500, 0);
$image1 = '@'.base64_encode($image1_image);
echo $image1;
}
file.php
$path = $_GET["path"];
$search = 'uploads' ;
$pathnew = str_replace($search, '', $path) ;
header('X-Accel-Redirect: /uploads/' . $pathnew);
header('Content-Type:');
Imagickエラー:
Fatal error: Uncaught ImagickException: no decode delegate for this image format `' @ error/constitute.c/ReadImage/509
デバッグ:
Warning: file_get_contents(https://domain.de/file.php?path=uploads/481/8979fc24e116c4577a44424a8814c79b0d5c73d9-19-03-2019-08-28-11-SA-150.jpg): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in /var/www/clients/...
// DIE(print_r($opts));
Array
(
[http] => Array
(
[method] => GET
[header] => Accept-language: de
Cookie: PHPSESSID=5krl856uibhugaf6p6n6hluufq
)
)
1
//DIE(print_r($_COOKIE));
Array(
[PHPSESSID] => 5krl856uibhugaf6p6n6hluufq
)
1
あなたは本質的にユーザーセッションをスプーフィングしようとしています:あなたが実際に(潜在的に悪意のある)第三者であるときにあなたがユーザーであるふりをするアクションを実行します。セッションが安全に設定されている場合、それは機能しません。
代わりに、コードでユーザーのアクセス許可を確認し、ファイルシステムを介して画像を読み取る必要があります。
別の方法は、サービスがバックエンドに対して自分自身を認証し、「このユーザーが私にこれを行うことを許可した」という情報を渡す、より複雑なシステムを作成することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加