我有一个Apache网络服务器,可作为iPhone和iPad应用程序的Web前端,仅通过POST和JSON进行通信。
有没有办法阻止Apache回复无效的请求?我可以看到我的错误日志充满了尝试打开文件,例如/admin.php /index.php等 - 我服务器上不存在的文件。
我相信这可以通过IIS实现,但你能用Apache做同样的事情吗?
基本上我希望请求显示超时,除非您将正确的内容发布到正确的文件 - 或者至少如果您没有请求现有文件。这会使服务器看起来不存在给所有人,但我的iPhone用户,因为所有通信都是SSL,并且目录不是真的可以猜测。
我确实禁用了ServerTokens以及所有这些,但是当我访问请求随机文件的服务器时,我仍然得到File not found等,这就是这些机器人经常做的事情。
答案 0 :(得分:0)
您可以使用mod_rewrite
重定向或拒绝不需要的请求来限制Apache响应的HTTP方法。
请注意,JSON不是HTTP方法。 GET, POST, PROPFIND
等是HTTP方法。有关HTTP方法的完整列表,请参阅:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
如果您的应用程序确实不需要尊重GET
个请求,那么您可以阻止所有其他方法。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(POST) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
我没有对此进行过测试,但它应该阻止除POST方法之外的任何其他内容。您可以添加多种方法。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(POST|GET) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
仅允许POST
和GET
。
由于处理重写方式,您可能还需要在某些服务器上指定“Options FollowSymLinks”。
如果您必须允许GET
个请求,那么您将看到未找到的错误。没有什么能阻止某人为不存在的对象发出HTTP请求。