php – 防止仅为未经授权的用户直接访问上传的文件 – Symfony
发布时间:2020-12-13 16:11:04 所属栏目:PHP教程 来源:网络整理
导读:我试图直接访问我的网站中登录用户的上传文件,以解决安全问题.我尝试了 this配置,但它似乎正在下载图像. 这是我正在显示图像的Twig文件代码. {% if(req.media!='') %} a href="{% path req.media,'reference' %}" data-fancybox class="fancybox" img src="{
我试图直接访问我的网站中登录用户的上传文件,以解决安全问题.我尝试了
this配置,但它似乎正在下载图像.
这是我正在显示图像的Twig文件代码. {% if(req.media!='') %} <a href="{% path req.media,'reference' %}" data-fancybox class="fancybox"> <img src="{% path (req.media),'reference' %}" alt="" width="70px" height="70px"/> </a> {% endif %} 下面是奏鸣曲媒体的配置. Sonata_media.yml sonata_media: # if you don't use default namespace configuration #class: # media: MyVendorMediaBundleEntityMedia # gallery: MyVendorMediaBundleEntityGallery # gallery_has_media: MyVendorMediaBundleEntityGalleryHasMedia db_driver: doctrine_orm # or doctrine_mongodb,doctrine_phpcr it is mandatory to choose one here default_context: default # you need to set a context contexts: default: # the default context is mandatory download: strategy: sonata.media.security.forbidden_strategy providers: #- sonata.media.provider.dailymotion #- sonata.media.provider.youtube - sonata.media.provider.image - sonata.media.provider.file #- sonata.media.provider.vimeo 解决方法
我按照这些步骤来实现这一要求.
>创建了一个函数并在防火墙中添加了它的路由,因此匿名用户无法访问该路径. 这是代码. security.yml - { path: ^/user(.*),roles: ROLE_DASHBOARD_USER } 使用routing.yml cms_direct_access_uploaded_files: path: /user/image-return/{fileId} defaults: { _controller: CMSFrontUserBundle:Dashboard:DirectAccessUploadedMedia } 调节器 public function DirectAccessUploadedMediaAction(Request $request,$fileId = null){ $user = $this->getUser(); if(!empty($user)){ $DM = $this->getDoctrineManager(); $media = $DM->getRepository('ApplicationSonataMediaBundle:Media')->find($fileId); if(!empty($media)) { $provider = $this->container->get( $media->getProviderName() ); $format = $provider->getFormatName( $media,'reference' ); $url = $provider->generatePublicUrl( $media,$format ); $ext = pathinfo($url,PATHINFO_EXTENSION); $returnFile = $_SERVER['DOCUMENT_ROOT'] .'/web'. $url; if (file_exists($returnFile)) { if($ext == 'pdf'){ header("Content-Type: application/pdf"); }else{ header("Content-Type: image/jpeg"); } header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($returnFile)); readfile($returnFile); exit; } }else{ throw $this->createAccessDeniedException('Forbidden!'); } }else{ throw $this->createAccessDeniedException('Forbidden!'); } } 枝条 {{ url('homepage') }}user/image-return/{{ req.media.id }} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |