我有一个需要身份验证的apache服务器,但是需要为所有人调用一些调用。
关闭这些调用基于查询字符串,例如:
/foo/api.php?Token=123&Task=DoStuff&Result=json
我通过一个LocationMatch教会说这可以工作,所以我计算了这个配置:
<LocationMatch ^/foo/api.php\?.*(Task=DoStuff).*>
Order Allow,Deny
Allow from All
</LocationMatch>
但这不允许我通过身份验证(意味着我得到401)。
如果我只是过滤^/foo/api.php
,我会通过身份验证,但这不够严格。
任何人都知道如何配置它以检查查询字符串中的Task参数?
对于身份验证我们使用的是kerberos,这是在整个网站上强制执行的 这是我们对路边的看法
LoadModule auth_kerb_module modules/mod_auth_kerb.so
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
AuthType Kerberos
Require valid-user
AuthName "Kerberos Login"
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbAuthRealms FOO.LOCAL
KrbServiceName HTTP/server.foo.local@foo.LOCAL
Krb5KeyTab /etc/httpd/conf/http.keytab
Satisfy Any
Order deny,allow
Deny from all
Allow from 192.168.72.90
Allow from 192.168.72.91
Allow from 192.168.72.94
Allow from 192.168.72.95
Allow from 127.0.0.1
</Directory>
答案 0 :(得分:10)
您可以阅读here:
&lt; Location&gt;,&lt; LocationMatch&gt;,&lt; Directory&gt;和&lt; DirectoryMatch&gt; Apache指令允许我们应用身份验证/授权 特定的资源模式具有高度的特异性,但是 不要将控制权交给查询字符串级别。
因此,您必须使用mod_rewrite来实现目标
例如:
RewriteEngine on
RewriteCond %{QUERY_STRING} Task=DoStuff
RewriteRule ^/foo/api.php - [E=no_auth_required:1]
<LocationMatch ^/foo/api.php>
Order allow,deny
Allow from env=no_auth_required
AuthType Basic
AuthName "Login Required"
AuthUserFile /var/www/foo/.htpasswd
require valid-user
Satisfy Any
</LocationMatch>
<强>更新强>
你已说过:
如果我只是过滤^ / foo / api.php,我会通过身份验证,但是 这不够严格。
然后,尝试将以下行添加到您的配置中:
RewriteEngine on
RewriteCond %{QUERY_STRING} Task=DoStuff
RewriteRule ^/foo/api.php - [E=no_auth_required:1]
<LocationMatch ^/foo/api.php>
Order allow,deny
Allow from env=no_auth_required
</LocationMatch>
答案 1 :(得分:2)
没有重写,有一种更简单的方法可以做到这一点。
您可以使用LocationMatch
与QUERY_STRING
匹配,然后使用If
块来匹配QUERY_STRING
的内容。即,像这样:
<LocationMatch "^/foo/api.php">
<If "%{QUERY_STRING} =~ /.*Task=DoStuff.*/" >
Order Allow,Deny
Allow from All
</If>
</LocationMatch>
答案 2 :(得分:-2)
我们不能使用 words = ["Daniel","Nashyl","Orla", "Simone","Zakaria"]
for word in words:
print word[:1]
,但<If %{QUERY_STRING} /a=b/>
RewriteEngine On
RewriteCond %{QUERY_STRING} test=ok
RewriteRule ^/ - [E=checkParamTest:1]
<LocationMatch "^/">
Order allow,deny
Allow from env=checkParamTest
Satisfy any
</LocationMatch>