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

马塞尔

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

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

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

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

我正在通过Facade(URL访问它,但是由于某种原因,会话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 /会话信息。

我怀疑以某种方式更改DOMPDF中的任何设置将对此有所帮助,因为它只是被安全检查阻止了。这是我用于DOMPDF / Laravel集成的实际工具DomPDF在的门面下已在我的应用中注册为服务提供商PDF

请记住,这当然不是路径问题,因为在我实施此安全检查之前它就已经起作用了。SO上与此相关的所有问题似乎都源于此。

如何在没有古怪的解决方法的情况下允许PDF进程访问图像?

布赖恩斯

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

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

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

这假定可以在本地文件系统的公共路径下访问该映像。如果它是一个生成的文件,某些无法直接访问的文件或太多的工作(例如,您正在为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()修改而来,标头和cookie munger已从使用PHP curl发送存储在$ _COOKIE global上的cookie取消

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查是否加载了动态添加的图像

来自分类Dev

POST后empty()检查未通过验证

来自分类Dev

生成图像后加载图像

来自分类Dev

添加缺少的约束后,UIWebView无法加载pdf文件

来自分类Dev

Laravel登录问题-会话Cookie是否未通过?

来自分类Dev

设置样式后,“文件”按钮未通过ajaxForm上传图像

来自分类Dev

通过pdfbox将图像添加到pdf,但是在添加pdf后获得空白

来自分类Dev

检查是否在游戏循环之前加载图像

来自分类Dev

加载前检查图像是否存在

来自分类Dev

检查是否首先加载了AJAX检索的图像

来自分类Dev

页面加载后通过javascript显示图像

来自分类Dev

无法通过JSON在Phantomjs中添加cookie

来自分类Dev

存储过程未通过C#插入

来自分类Dev

Django图像无法通过管理面板加载

来自分类Dev

如何检查背景img是否无法加载?

来自分类Dev

如何检查JavaScript中是否已加载了已加载的图像?

来自分类Dev

POST请求未通过JavaScript发送Cookie

来自分类Dev

无法检查用户是否附加了图像

来自分类Dev

添加/删除类后无法加载页面

来自分类Dev

如何检查是否存在 cookie 以允许用户继续图像?

来自分类Dev

Istio 1.5 Cors无法正常工作-对预检请求的响应未通过访问控制检查

来自分类Dev

是否可以通过程序更改图像的颜色?

来自分类Dev

分配图像后,iOS UIButton无法加载图像

来自分类Dev

Pagespeed无法缓存通过JQuery添加的图像

来自分类Dev

antd RadioButton未通过编程检查

来自分类Dev

反应未通过Webpack加载的图标

来自分类Dev

Ubuntu软件中心未通过VNC加载

来自分类Dev

反应未通过Webpack加载的图标

来自分类Dev

在禁用的网络安全模式下运行的Chrome中,对预检请求的响应未通过访问控制检查

Related 相关文章

  1. 1

    检查是否加载了动态添加的图像

  2. 2

    POST后empty()检查未通过验证

  3. 3

    生成图像后加载图像

  4. 4

    添加缺少的约束后,UIWebView无法加载pdf文件

  5. 5

    Laravel登录问题-会话Cookie是否未通过?

  6. 6

    设置样式后,“文件”按钮未通过ajaxForm上传图像

  7. 7

    通过pdfbox将图像添加到pdf,但是在添加pdf后获得空白

  8. 8

    检查是否在游戏循环之前加载图像

  9. 9

    加载前检查图像是否存在

  10. 10

    检查是否首先加载了AJAX检索的图像

  11. 11

    页面加载后通过javascript显示图像

  12. 12

    无法通过JSON在Phantomjs中添加cookie

  13. 13

    存储过程未通过C#插入

  14. 14

    Django图像无法通过管理面板加载

  15. 15

    如何检查背景img是否无法加载?

  16. 16

    如何检查JavaScript中是否已加载了已加载的图像?

  17. 17

    POST请求未通过JavaScript发送Cookie

  18. 18

    无法检查用户是否附加了图像

  19. 19

    添加/删除类后无法加载页面

  20. 20

    如何检查是否存在 cookie 以允许用户继续图像?

  21. 21

    Istio 1.5 Cors无法正常工作-对预检请求的响应未通过访问控制检查

  22. 22

    是否可以通过程序更改图像的颜色?

  23. 23

    分配图像后,iOS UIButton无法加载图像

  24. 24

    Pagespeed无法缓存通过JQuery添加的图像

  25. 25

    antd RadioButton未通过编程检查

  26. 26

    反应未通过Webpack加载的图标

  27. 27

    Ubuntu软件中心未通过VNC加载

  28. 28

    反应未通过Webpack加载的图标

  29. 29

    在禁用的网络安全模式下运行的Chrome中,对预检请求的响应未通过访问控制检查

热门标签

归档