基于querystring的Apache权限

k2arahey  于 2022-12-14  发布在  Apache
关注(0)|答案(3)|浏览(132)

我有一个apache服务器,需要进行身份验证,但是有一些调用需要允许所有人使用。
On off这些调用是基于查询字符串的,例如:
/foo/API.php?令牌= 123 &任务=工作内容&结果=json
我教了一个LocationMatch,这将工作,所以我制定了以下配置:

<LocationMatch ^/foo/api.php\?.*(Task=DoStuff).*>
    Order Allow,Deny
    Allow from All
</LocationMatch>

但这并不能让我通过认证(意味着我得到了一个401),如果我只是过滤^/foo/api.php,我就通过了认证,但这还不够严格。
有人知道如何配置它来检查querystring中的Task参数吗?
对于身份验证,我们使用kerberos,这是在整个站点上强制执行的。这是我们的kerb配置。

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>
k0pti3hp

k0pti3hp1#

here所示:
、和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>
rkkpypqq

rkkpypqq2#

在Apache2.4中,有一种更简单的方法可以做到这一点,而无需重写。
你可以使用LocationMatch来匹配QUERY_STRING,然后使用If块来匹配QUERY_STRING的内容,例如:

<LocationMatch "^/foo/api.php">
  <If "%{QUERY_STRING} =~ /.*Task=DoStuff.*/" >
       Require all granted
  </If>
</LocationMatch>
yx2lnoni

yx2lnoni3#

我们不能使用<If %{QUERY_STRING} /a=b/>,〈apache 2.4不支持它
RewriteEngine On
RewriteCond %{QUERY_STRING} test=ok
RewriteRule ^/ - [E=checkParamTest:1]
<LocationMatch "^/"> Order allow,deny Allow from env=checkParamTest Satisfy any </LocationMatch>
<Location /> AuthType openid-connect Require valid-user ... </Location>

相关问题