绕过referrer的基本身份验证

时间:2015-01-19 20:53:58

标签: apache .htaccess basic-authentication

我已经制作了一个糟糕的,可怕的htaccess代码作为阻止我们前进的障碍,但可怕的代码让每个人都不高兴。所以这就是:

DomainA.com托管了一些我们需要进入DomainB.com以及DomainB.com所有子域的代码。

这是我们想出的可怕代码,并且在DomainA.com的htaccess文件中打了一针:

<If "%{HTTP_REFERER} == 'https://DomainB.com/testpage1.php'">
</If>

<ElseIf "%{HTTP_REFERER} == 'https://DomainB.com/testpage2.php'">
</ElseIf>

<ElseIf "%{HTTP_REFERER} == 'https://DomainB.com/testpage3.php'">
</ElseIf>

<Else>
AuthType Basic
AuthName "Our Walled Garden - Login Credentials Required"
AuthUserFile /path/to/.htpasswd
Require valid-user
</Else>

您能否帮助我们减少这一点,以便我们不必为请求定义协议或特定子域?我已经弄乱了一些正则表达式,我甚至无法在IF块中使用简单的正则表达式匹配。

1 个答案:

答案 0 :(得分:2)

如果您想使用正则表达式,可以使用SetEnvIf代替加上Require子句。

可能是这样的:

SetEnvIfNoCase Referer ^https://DomainB\.com/(testpage1|testpage2|testpage3)\.php$ noauth=1

AuthType Basic
AuthName "Our Walled Garden - Login Credentials Required"
AuthUserFile /path/to/.htpasswd
Require valid-user
Require env noauth

当有多个Require指令时,它们会自动分组为&#34;要求任何&#34; (见Require apache 2.4 docs)。

Setenv指令与引用者匹配,如果匹配&#34; noauth&#34; env变量设置。然后require指令说有效用户或noauth env变量将满足访问。

请注意,引用者很容易伪造,所以这并不是非常安全。