gpt4 book ai didi

php - 添加安全检查后 PDF 生成过程无法加载图像(cookie 未通过?)

转载 作者:搜寻专家 更新时间:2023-10-31 21:07:21 24 4
gpt4 key购买 nike

我最近在我的 Routes.php 文件中添加了安全检查,以确保只有应该能够访问图像的人才能访问这些图像。

它按用户交互的预期工作,但现在当我生成 PDF 时,获取图像的过程似乎不允许访问,因此图像无法加载到 PDF 中。

以下是在 PDF 的 Blade 文件中访问图像的方式:

<img src="{{ URL::to('image/person/signature',$person->person_token) }} ">

我正在通过 Facade (URL) 访问它,但出于某种原因, session cookie 似乎没有在此请求中传递,因此它未能通过安全检查。

这是安全检查:

Route::get('image/person/signature/{authToken}',function($authToken){
// This permission checking should actually probably be in the filters file
$loggedUser = Auth::user();

$person = Person::getByAuthToken($authToken);
if ($person instanceOf Person){
// PDF is getting shut out here
if($loggedUser->company_id == $person->company_id || $loggedUser->isAdmin()) {
// Processing goes here
} else{
die('You are not authorized to perform this function. Your IP address has been logged.');
}
} else {
die('You are not authorized to perform this function. Your IP address has been logged.');
}
});

我还尝试将以下条件添加到安全检查中以允许进程访问,但无效:

  • $loggedUser instanceOf PDF
  • $loggedUser instanceOf ServiceProvider
  • Auth::check()

Auth::check() 没有工作的事实是可疑的,这表明 cookie/session 信息没有被传递。

我怀疑更改 DOMPDF 中的任何设置是否对此有所帮助,因为它只是被安全检查阻止了。这是我用于 DOMPDF / Laravel integration 的实际工具.在我的应用程序中,DomPDF 在 PDF 的 Facade 下注册为服务提供商。

请记住,这肯定不是路径问题,因为它在我实现此安全检查之前就可以正常工作。 SO 上与此相关的所有问题似乎都源于此。

如果没有古怪的解决方法,我如何才能允许 PDF 进程访问图像?

最佳答案

可能最简单的方法是完全跳过 HTTP 并通过文件系统访问您的文件。

<img src="{{ public_path() . '/image/person/signature }} ">

(我对 Laravel 不太熟悉,所以也许有人可以解决这个问题。)

这假定图像可以在本地文件系统的公共(public)路径下访问。如果它是一个生成的文件,无法直接访问,或者工作量太大(例如,您正在为 Web 和 PDF 生成重复使用相同的模板),那么您将不得不考虑一些更复杂的事情。


所以有点复杂……根据用户的请求创建自定义流上下文并将其传递给 dompdf。例如,如果您使用 cookie 进行身份验证,您可以尝试这样的操作:

$cookie_data = implode(
"; ", array_map(
function($k, $v) {
return "$k=$v";
},
array_keys($_COOKIE),
array_values($_COOKIE)
)
);

$opts = array(
'http'=>array(
'method'=>'GET',
'header'=>'Cookie: ' . $cookie_data
)
);
$context = stream_context_create($opts);

$dompdf = new DOMPDF;
$dompdf->set_http_context($context);
...

我只是在黑暗中尝试一下(我不需要测试这个,对吧?)。这假定您的用户是触发 PDF 呈现的用户(似乎是这种情况),并且 AuthN 机制是可以访问并添加到自定义流上下文的机制。您可能需要调整上下文以获得通过身份验证所需的确切配置。

上下文代码从 PHP file_get_contents() and headers 修改和曲奇芒格来自 Sending cookies stored on $_COOKIE global using PHP curl .

关于php - 添加安全检查后 PDF 生成过程无法加载图像(cookie 未通过?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com