我需要以某种方式配置我的Apache(2.4),以防止回答特定的请求
我有一个在服务器上运行的应用程序myapplication.com
. 浏览应用程序会在服务器上触发一些进一步的 ajax 请求,模式myapplication.com/abc
。必须禁止这种"abc"请求,当从与本上下文不同的上下文调用时。因此,应该不可能在不同的选项卡中调用此请求。也不要在浏览器上下文之外调用这些请求,例如通过 curl 或 wget 或任何非浏览器 http 客户端。
指令必须如下所示
<If "Request has not been triggered as ajax from within my application" && %{REQUEST_URL} contains 'abc' ">
Require all denied
</If>
此指令会导致错误,我不知道为什么,将=~
更改为!~
在语义上是错误的,但不会导致错误。
<If "%{HTTP_REFERER} !~ /myapplication.com/ && %{QUERY_STRING} =~ /abc/ ">
Require all denied
</If>
这有什么问题?
调试 apache 配置的任何帮助也将不胜感激 - 我没有得到任何信息,为什么这个指令会导致错误。
从浏览器中的myapplication.com
进行的任何XMLHttpRequest
或fetch
调用都将包含myapplication.com
作为referer
标头。
以下 apache conf 代码段将阻止引用者未myapplication.com
的请求。
<Location "/abc">
RewriteEngine on
RewriteCond "%{HTTP_REFERER}" "!myapplication.com"
RewriteRule . - [R=403,L]
</Location>
此配置需要mod_rewrite
,如果尚未启用,可以使用a2enmod rewrite
启用。