Web前端中图像的访问控制

Access control for images in web frontend

我的 Symfony 3 网络应用程序有一个由 FOSUserBundle 管理的用户登录控件。 我很好地检查服务器端的登录状态,控制用户可能会或可能不会执行的所有必要操作。

现在用户可以上传图片了。 有一个视图向用户显示其所有图像。为了向前端提供此用户画廊视图所需的 img 路径,我将此用户图像的所有路径传递到前端,然后在那里显示。

这是我感到困惑的地方: 如何将此 img-paths 的访问权限限制为仅允许相应(已登录)用户访问并拒绝所有其他用户访问? 或者:如何在不使用每个人都可以访问的 img 路径的情况下向前端 Web 视图提供图像? 有没有办法通过使用 Symfony/FOSUserBundle 功能来做到这一点?

为此您需要 ACL(访问控制列表)。一种解决方案是将 table 与 imageID 和允许的用户 ID 一起使用,这样您就可以检查给定的图像并从该 table/Entity 访问允许的用户,并为该用户提供图像路径。进一步确保使用与 imageimage_useruser 实体的正确关系.

How do I restrict access to this img-pathes to the respective (logged in) user only and deny it to all others?

How do I provide images to a frontend web view without using an img-path accessible for everyone?

对于以上两个,在您的控制器中,检查 image_user 中登录用户允许的图像,并获取该特定用户的图像路径和将它们传递给 view/twing(您可以为此使用数组)

这对我有用:

保留所有内容,但调用 php-脚本来检索图像,而不是直接加载图像。 所以我只更改了 img-tag 中的 "src" 属性来调用脚本并将 img-name 作为 GET 参数传递,一般来说是:

<img src="[server]/image.php?img=xy.jpg">

在 Symfony 中生成的路由显然有点不同,例如:

<img src="[server]/my/img/loading/route/xy.jpg">

在处理请求的控制器中检查请求的图像所需的访问权限并准备响应:

$response = new Response();
$response->setContent( file_get_contents($imgPath) );
$response->setStatusCode( Response::HTTP_OK );
$response->headers->set( 'Content-type', $mimeType );
$response->headers->set( 'Content-length', filesize($imgPath) );

从相应的控制器操作方法返回此响应现在可以正常工作。