检查是否有人登录:
<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
收割台(太普通)。
(不过,澄清一下,这实际上并不比原始代码片段更“安全”。)