2021年使用WordPress_LOGED_IN限制对上传文件夹的直接访问

时间:2021-06-20 作者:Work-Together2013

我正在寻找限制直接访问Wordpress Uploads文件夹的方法。我读过一些关于使用“Stackoverflow”的文章和博客文章;wordpress\\u logged\\u in“wordpress\\u logged\\u登录”;在里面htaccess,用于检查某人是否已登录,以及他们是否未对其进行限制。请参见下面的代码片段示例。

然而,我也读到了一篇大约10年前写的帖子,说最好通过PHP来做这件事,因为检查cookie不是很安全,可能会被黑客攻击。然而,从那时起,Wordpress改进了Cookie的操作方式,而且据我所知,它更加安全。

这里有旧的Stackoverflow线程。

How to Protect Uploads, if User is not Logged In?

如果有人登录,检查cookie的可黑客性如何?这里的想法是不是说一个人可以用暴力强迫饼干?对我来说,这个解决方案更简单,我可以很容易地理解它。

H此处的访问示例-检查是否有人登录:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} (.*)
    RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_([a-zA-Z0-9_]*) [NC]
    RewriteRule .* - [F,L]
</IfModule>

3 个回复
最合适的回答,由SO网友:MrWhite 整理而成

检查是否有人登录:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} (.*)
    RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_([a-zA-Z0-9_]*) [NC]
    RewriteRule .* - [F,L]
</IfModule>
10年前也是如此。此代码位于.htaccess 与WordPress设置Cookie的方式无关。而这并不是;检查是否有人登录;。它只检查与正则表达式匹配的字符串wordpress_logged_in_([a-zA-Z0-9_]*) 不会出现在Cookie 标题。“The”;“问题”;任何人都可以创建一个请求,在Cookie 通过测试的标题。因为众所周知,WP设置了这样一个cookie,所以不难猜测。

检查请求是否为;“已登录”;WordPress就是使用PHP。

旁白:第一个RewriteCond 检查的指令REQUEST_FILENAME 是多余的,因为它只是检查任何东西。这个NC 在这种检查中不应使用第二个条件上的标志,因为您现在不必要地增加了将通过测试的字符串的范围(例如。wOrDpReSs_LoGgEd_In_ 将通过)。因此,包括A-Z 在hash部分中,hash总是不必要的-hash总是小写的(并且总是32个字符长)。这个L 与一起使用时不需要标志F 标志(暗示)和正则表达式.* 如果该cookie不存在,将阻止所有请求,而不仅仅是访问WordPress uploads文件夹。您还应该避免使用<IfModule mod_rewrite.c> 任何与安全相关的包装,因为;“故障”;在您的服务器配置中(即mod\\u rewrite被错误禁用),将允许不受限制的访问,而不是因错误而中断(这将是更好的)。

所以,上面应该这样写:

RewriteCond %{HTTP_COOKIE} !(?:^|;\\s)wordpress_logged_in_[a-z0-9_]{32}=
RewriteRule ^wp-content/uploads/ - [F]
正则表达式(?:^|;\\s)wordpress_logged_in_[a-z0-9_]{32}= 专门检查cookie名称(更具体),而不是出现在Cookie 收割台(太普通)。

(不过,澄清一下,这实际上并不比原始代码片段更“安全”。)

SO网友:Jacob Peattie

这里什么都没有改变。10年前这是个坏主意的原因是因为这是个坏主意。不是因为WordPress的缺陷。

对于您的htaccess示例,我需要做的就是创建一个名为wordpress_logged_in_a 现在我有权限了。

这是WordPress无法改进的。要知道用户是否应该拥有访问权限,您需要知道cookie是否用于有效会话,以及该信息是否在数据库中。饼干的存在本身并不能证明什么。

SO网友:birgire

如果有人登录,检查cookie的可黑客性如何?这里有没有人可以用暴力强迫饼干的想法?对我来说,这个解决方案更简单,我可以很容易地理解它。

我认为您可以用一个简单的命令行curl请求来愚弄它,例如:

curl --cookie "..." https://example.com/wp-content/uploads/2021/06/test.jpg 
包含与中的测试匹配的cookie

RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_([a-zA-Z0-9_]*) [NC]
这就是为什么Moodle通过PHP打开上传的用户文件来处理用户权限。

相关推荐

用于阻止带有额外条件的僵尸程序的.htaccess规则

我安装了WP multisite。我与Ezoic和Cloudflare集成。我实施了防火墙规则。但是,我在阻止具有X-Middleton 在User-Agent, 因为我的原始服务器允许它,用于检测真正的用户IP。这个X-Middleton 当机器人通过充当反向代理的Ezoic时,会附加。我在.htaccess 但它不起作用,因为源服务器允许所有X-Middleton.规则如下:# BLOCK BOTS RewriteEngine On RewriteCond %{HTTP_USER_AG