【问题标题】:Prevent Apache from answering invalid requests防止 Apache 响应无效请求
【发布时间】:2014-06-10 17:48:46
【问题描述】:

我有一个 Apache 网络服务器,它充当 iPhone 和 iPad 应用程序的网络前端,仅通过 POST 和 JSON 进行通信。

有什么方法可以防止 Apache 响应无效请求?我可以看到我的错误日志充满了打开文件的尝试,例如 /admin.php /index.php 等 - 我的服务器上不存在的文件。

我相信这在 IIS 上是可能的,但是你能用 Apache 做同样的事情吗?

基本上,我希望请求显示为超时,除非您将正确的内容发布到正确的文件中 - 或者至少如果您不请求现有文件。这将使除了我的 iPhone 用户之外的所有人都觉得服务器不存在,因为所有通信都是 SSL 并且目录不是真的可以猜测的。

我确实禁用了 ServerTokens 和所有这些,但是当我访问请求随机文件的服务器时,我仍然得到 File not found 等,这是这些机器人经常做的事情。

【问题讨论】:

    标签: apache security


    【解决方案1】:

    您可以通过使用 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>
    

    只允许POSTGET

    由于处理重写的方式,您可能还需要在某些服务器上指定“Options FollowSymLinks”。

    如果您必须允许 GET 请求,那么您将看到那些未找到的错误。没有什么可以阻止某人对不存在的对象发出 HTTP 请求。

    【讨论】:

    • 很公平。服务器必须响应它不能提供的东西并且这种行为不能改变,这似乎很奇怪。
    • 我很清楚 JSON 不是 HTTP 方法 - 服务器将 JSON 响应传递给 POST 请求。我就是这个意思。
    猜你喜欢
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多