访问控制的图像在web前端


Access control for images in web frontend

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

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

这是我感到困惑的地方:如何将对该img- paths的访问限制为仅对相应的(已登录的)用户,并拒绝对所有其他用户进行访问?或者:我如何向前端web视图提供图像,而不使用每个人都可以访问的img-path ?是否有一种方法可以通过使用Symfony/FOSUserBundle功能来做到这一点?

这个适合我:

保持一切不变,但调用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) );

从相应的控制器动作方法返回此响应现在工作正常

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

我如何限制访问这个img- paths只有相应的(登录)用户,并拒绝所有其他人?

如何为前端web视图提供图像而不使用每个人都可以访问的img-path ?

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