我可以控制 HttpServer,但不能控制 ApplicationServer 或坐在那里的 Java 应用程序,但我需要阻止直接访问这些应用程序上的某些页面。准确地说,我不希望用户自动访问向适当的 servlet 发出直接 GET/POST HTTP 请求的表单。
所以,我决定根据HTTP_REFERER
. 毕竟,如果用户在网站内部导航,它会有一个合适的HTTP_REFERER
. 嗯,我就是这么想的。
我在 .htaccess 文件中实现了一个重写规则,上面写着:
RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+\?.+ - [F]
我希望禁止访问未浏览站点但使用查询字符串向“servlet1”或“servlet2”servlet 发出直接 GET 请求的用户。但是我的期望突然结束了,因为正则表达式(servlet1|servlet2)/.+\?.+
根本不起作用。
当我将该表达式更改为时,我真的很失望,(servlet1|servlet2)/.+
而且效果如此之好,以至于我的用户无论是否浏览该网站都会被屏蔽。
所以,我的问题是:如果我没有访问/特权/时间来修改应用程序,我如何才能完成不允许“机器人”直接访问某些页面的事情?