仅允许某些用户访问某些文件夹/文件

     2023-02-27     301

关键词:

【中文标题】仅允许某些用户访问某些文件夹/文件【英文标题】:allow access to certain folder/files only for some users 【发布时间】:2012-05-26 00:37:02 【问题描述】:

我有一个 Weblication,它只向某些用户提供对某些页面的访问权限。现在这些页面上链接了一些文件。如果有人有 URL,每个人都可以访问这些文件(在这种情况下是搜索引擎)。这应该改变!如何保护这样的目录?我想到了两种可能:

htaccess:每次创建新用户时输入用户名 + 密码 -> 不适合该类型的项目(还需要第二次登录) download.php?file=xxx:不知道如何在 Weblication 中的所有链接(静态页面)中包含这样一个

还有其他可能吗?

【问题讨论】:

您能否详细说明“不知道如何在 Weblication 中的所有链接中包含这样一个”,以便我尝试更详细的答案。 Weblication 是由静态页面构建的。但由于它是一个 CMS,用户可以编辑内容,但它仍然是一个静态页面。所以我不知道如何为现有页面和用户未来内容的所有下载链接添加 download.php。 【参考方案1】:

取自this link并翻译(但仅在WaybackMachine中可用)。

借助 mod_rewrite 的个性化输出

借助wCheckPermissionViewFile功能可以个性化php文件。在文件头中执行权限检查以抑制输出就足够了。如果需要个性化其他文件类型(例如 ZIP、PDF、...),可以使用wPermission.cgi 或自定义 php 文件。

为了在每个指向二进制文件的个性化链接之前为编辑器节省一些编写wPermission.cgi 的工作,可以使用Apache 模块mod_rewrite。有了这个,可以在执行之前转换每个访问的链接。例如,您可以将wPermission.cgi 定义在每个网络服务器调用的前面。直接执行也可以在 php 文件的帮助下重定向(不需要wPermission.cgi)。

通过 Perl (wPermission.cgi) 检查的 .htaccess 文件示例

#Alle Dateien mit angegebener Endung über wPermission.cgi aufrufen.
RewriteEngine on
RewriteCond %REQUEST_URI .pdf$ [NC,OR]
RewriteCond %REQUEST_URI .doc$ [NC,OR]
RewriteCond %REQUEST_URI .xls$ [NC,OR]
RewriteCond %REQUEST_URI .ppt$ [NC,OR]
RewriteCond %REQUEST_URI .pps$ [NC,OR]
RewriteCond %REQUEST_URI .zip$ [NC,OR]
RewriteCond %REQUEST_URI .jpg$ [NC,OR]
RewriteCond %REQUEST_URI .jpeg$ [NC,OR]
RewriteCond %REQUEST_URI .png$ [NC,OR]
RewriteCond %REQUEST_URI .gif$ [NC]
RewriteRule (.*) /cgi-bin/wPermission.cgi?file=/de/dokumente/$1

.htacces 文件的示例,通过 PHP 进行检查(例如 download.php,见下文)

#Alle Dateien mit angegebener Endung über die angegebene PHP-Datei aufrufen.
RewriteEngine on
RewriteCond %REQUEST_URI .pdf$ [NC,OR]
RewriteCond %REQUEST_URI .doc$ [NC,OR]
RewriteCond %REQUEST_URI .xls$ [NC,OR]
RewriteCond %REQUEST_URI .ppt$ [NC,OR]
RewriteCond %REQUEST_URI .pps$ [NC,OR]
RewriteCond %REQUEST_URI .zip$ [NC,OR]
RewriteCond %REQUEST_URI .jpg$ [NC,OR]
RewriteCond %REQUEST_URI .jpeg$ [NC,OR]
RewriteCond %REQUEST_URI .png$ [NC,OR]
RewriteCond %REQUEST_URI .gif$ [NC]
RewriteRule (.*) /de/download.php?path=/de/dokumente/$1

说明

如果您想个性化目录/de/dokumente 中的所有PDF 和ZIP 文件而不更改链接,您可以将.htaccess 文件放入该目录。在这个文件中定义了重定向规则。

规则可以用任意文件扩展名进行扩展,NC 代表不区分大小写。请注意,这些规则也会继承到子目录中。

二进制文件本身必须签入并提供相应的个性化设置。

如果您想检查文件是否处于有效的发布时间段(例如在线或离线),请在通过 PHP API wIsOnline 进行权限检查之前进行检查。

示例:download.php 用于实现“.htacces 文件通过 PHP 的检查(例如 download.php)”

<?php

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Dieses Skript erzwingt den Download von Dokumenten. PDF, DOC, XLS und PPT Dokumente werden je nach Browser angezeigt.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Einlesen der Weblication(r) 4.x API:
require_once ($_SERVER["DOCUMENT_ROOT"]."/weblication/lib/WAPI/WAPI.inc");

$filenameRel = str_replace("..", "", $_GET['path']);
$filename    = $_SERVER['DOCUMENT_ROOT'].$filenameRel;

if(preg_match("/\.\w+$/", $filename) && !preg_match("/\.(php|php5|php4|xml|xsl|cgi|pl)$/", $filename) && !preg_match("/\/weblication\//", $filename) &&  file_exists( $filename ) )
  if(wCheckPermissionViewFile($filenameRel) == 1)
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private", false);
    if(preg_match("/\.pdf/i", $filenameRel))
      header("Content-Type: application/pdf");
    
    else if(preg_match("/\.doc/i", $filenameRel))
      header("Content-Type: application/msword");
    
    else if(preg_match("/\.xls/i", $filenameRel))
      header("Content-Type: application/msexcel");
    
    else if(preg_match("/\.ppt/i", $filenameRel))
      header("Content-Type: application/mspowerpoint");
    
    else if(preg_match("/\.pps/i", $filenameRel))
      header("Content-Type: application/mspowerpoint");
    
    else if(preg_match("/\.jpg/i", $filenameRel))
      header("Content-Type: image/jpg");
    
    else if(preg_match("/\.jpeg/i", $filenameRel))
      header("Content-Type: image/jpeg");
    
    else if(preg_match("/\.png/i", $filenameRel))
      header("Content-Type: image/png");
    
    else if(preg_match("/\.gif/i", $filenameRel))
      header("Content-Type: image/gif");
    
    else
      header("Content-Type: application/force-download");
      header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
      header("Content-Transfer-Encoding: binary");
      header("Content-Length: ".filesize($filename));
    
    readfile($filename);
  
  else
    print "Permission Denied!";
  

else 
  print 'Sorry, wrong path or file does not exist on the server!';
  print '<br/><a href="javascript:history.back();">back</a>';

exit;

?> 

对于较新版本的Weblication this link 可能会有所帮助。它是德语,因为制造商的主要语言是德语。

【讨论】:

那个页面已经不存在了。它直接重定向到启动页面dev.weblication.de - 它也是非英语的。 感谢您的信息。这是我的一篇旧帖子,我没有意识到只有链接的答案有多糟糕。我使用的 CMS 主要语言是德语,制造商的主要语言也是德语,但我认为代码本身对语言并不敏感。我更新了我的答案并附上了翻译。 那太好了,谢谢 :-) 干杯,不客气。【参考方案2】:

您可以将所有文件存储在 非公开 目录中,然后编写一个页面(很像您所说的 download.php?file=xxx)来检查用户有权访问该文件,然后输出到浏览器。

编辑:

当您使用 CMS 时,我会假设用户有一个不错的 GUI,他们可以单击以选择他们希望插入/链接到的文件?如果是这种情况,您可能会找到它用于创建链接的代码,然后将 http://www.whatever.com/download.php?file= 添加到文件名前,然后通过您的脚本路由下载。

【讨论】:

我认为问题中已经提到了这一点,TS 正在寻找替代方案。 我不确定,所以我还是发布了它。我也请他详细说明一下。 没问题,这甚至可以为 TS 澄清一些事情,只是想让你知道我是如何理解这个问题的。 @Chief17:感谢您的回答。我回答了你的问题。如前所述,我在 CMS 中集成 download.php 时遇到问题 ... @hakre:你为什么删除你的答案?我认为它仍然有用(它只是对我没有帮助)。

仅允许经过身份验证的用户访问 API 路由

】仅允许经过身份验证的用户访问API路由【英文标题】:AllowonlyauthenticateduserstoaccessAPIroutes【发布时间】:2020-01-0112:37:45【问题描述】:我想只允许经过身份验证的用户访问某些API路由。我使用默认的Laravel身份验证系统。默认登... 查看详情

php允许用户仅编辑某些页面(代码片段)

查看详情

配置安全性以仅允许某些用户更新条目,但允许在 Backand 中读取所有用户

】配置安全性以仅允许某些用户更新条目,但允许在Backand中读取所有用户【英文标题】:ConfigureSecuritytoallowupdateofentriesonlyforsomeusersbutallowreadforallinBackand【发布时间】:2016-02-1913:57:43【问题描述】:是否可以配置表的安全性,只... 查看详情

如何禁止某个linux用户访问某些文件夹及执行某些命令

方案1:给这个文件A增加个a的隐藏属性,只能增加数据不能删除修改数据,只有root能设置这个隐藏属性chattr+aAlsattrA可以查看隐藏属性方案2:修改文件所属用户和组,普通用户不能访问文件Achownroot:rootA方案3:只有文件主人可以... 查看详情

SQL Pivot 允许我查看哪些用户可以访问某些屏幕

】SQLPivot允许我查看哪些用户可以访问某些屏幕【英文标题】:SQLPivotthatallowsmetoseewhichusershaveaccesstocertainscreens【发布时间】:2018-02-2620:19:01【问题描述】:我有以下表格(在SQLServer中):屏幕访问+----+------+--------------+|id|user|scree... 查看详情

django - 仅适用于某些用户组的可访问 url 模式

】django-仅适用于某些用户组的可访问url模式【英文标题】:django-Accessibleurlpatternonlyforcertaingroupofusers【发布时间】:2014-09-0911:46:47【问题描述】:有没有办法限制某些django用户组访问url模式?例如,以/settings/开头的所有内容都... 查看详情

如何限制对当前文件的某些功能或对象的访问?

】如何限制对当前文件的某些功能或对象的访问?【英文标题】:Howtorestrictaccesstocertainfunctionsorobjectstocurrentfile?【发布时间】:2012-07-3118:06:23【问题描述】:我想知道是否可以限制对在命名空间中声明的某些函数或对象的访问,... 查看详情

如何根据用户角色将 geoserver WFS 服务配置为仅访问某些图层?

】如何根据用户角色将geoserverWFS服务配置为仅访问某些图层?【英文标题】:HowcangeoserverWFSservicebeconfiguredtoaccessonlycertainlayersbasedonuserrole?【发布时间】:2015-09-1812:06:33【问题描述】:我们使用的是geoserver2.7.2,但在设置WFS安全性... 查看详情

怎样禁止访问tomcat目录下的某些文件??

...录不能访问,怎样做啊?linux呢?参考技术A这个,应该是文件夹权限问题,楼上说的对,补充一点就是用户不能是管理员权限,用户进你的电脑只能是用来宾权限,这样你用管理员权限就可以给他设置访问禁止 参考技术B资源管... 查看详情

使用 FolderBrowserDialog 限制对某些文件夹的访问

】使用FolderBrowserDialog限制对某些文件夹的访问【英文标题】:RestrictingaccesstocertainfolderswithaFolderBrowserDialog【发布时间】:2012-09-1409:20:47【问题描述】:我想限制人们可以选择在我的应用中设置其默认保存路径的文件夹。是否有... 查看详情

如何允许某些端口仅对 Cloud Custodian 中的某些安全组开放?

】如何允许某些端口仅对CloudCustodian中的某些安全组开放?【英文标题】:HowtoallowcertainportsopentoworldonlyforcertainsecuritygroupsinCloudCustodian?【发布时间】:2019-09-0713:14:41【问题描述】:我的政策中规定只允许80和443向世界开放。"or":["C... 查看详情

如何配置亚马逊云端以阻止某些 S3 存储桶文件访问?

】如何配置亚马逊云端以阻止某些S3存储桶文件访问?【英文标题】:HowtoconfigureamazoncloudfronttoblocksomeS3bucketfilesaccess?【发布时间】:2016-05-1210:38:18【问题描述】:在S3上,我们将所有文件设为私有。用户无法通过S3链接加载任何... 查看详情

红移光谱:如何仅导入某些文件

...红移光谱时,您似乎只能导入提供位置的数据,直到一个文件夹,它会导入文件夹内的所有文件。有没有办法从包含许多文件的文件夹中只导入一个文件。当提供带有filename的完整路径时,我认为它会将文件视为清单文件并给出... 查看详情

swift5如何在用户授予有限访问权限以选择某些照片后仅显示有限的照片库

】swift5如何在用户授予有限访问权限以选择某些照片后仅显示有限的照片库【英文标题】:swift5howtoonlydisplaylimitedphotolibraryafteruserhasgrantedlimitedaccesstoselectsomephotos【发布时间】:2020-11-0705:56:08【问题描述】:在WWDC2020中,引入了新... 查看详情

仅允许某些域能够加载 iFrame

】仅允许某些域能够加载iFrame【英文标题】:AllowonlycertaindomainsbeingabletoloadaniFrame【发布时间】:2011-02-1610:03:29【问题描述】:我正在为慈善机构制作一些小部件。由于某些徽标许可问题,我必须找到一些方法,只允许白名单网... 查看详情

如何允许 Bob 安全地读取 /var/log/ 中的某些文件? [关闭]

】如何允许Bob安全地读取/var/log/中的某些文件?[关闭]【英文标题】:HowtopermitsecurelyBobtoreadsomefilein/var/log/?[closed]【发布时间】:2016-07-2314:24:48【问题描述】:这是我的第一个问题。我正在使用Centos服务器。我想知道如何适当地... 查看详情

PyPDF2 仅返回某些文件的空行

】PyPDF2仅返回某些文件的空行【英文标题】:PyPDF2returnsonlyemptylinesforsomefiles【发布时间】:2018-01-0403:12:27【问题描述】:我正在编写一个脚本来“读取”PDF文件,然后自动重命名它从字典中识别的文件。然而,PyPDF2只为某些PDF返... 查看详情

如何设置nginx,使得其可以拒绝某些ip连接

nginx拒绝或允许指定IP,是使用模块HTTP访问控制模块(HTTPAccess).控制规则按照声明的顺序进行检查,首条匹配IP的访问规则将被启用。location/deny192.168.1.11;allow192.168.1.22/224;allow10.1.1.12/126;denyall;deny表示拒绝,allow表示允许。上面的... 查看详情