【问题标题】:How to restrict access to my webpage如何限制访问我的网页
【发布时间】:2012-01-01 08:03:31
【问题描述】:

我有一个搜索页面的网址(例如http://x.y.z/search?initialQuery=test)。它不是一个 web 服务端点,它只是一个基本的 url(它通过一个 Spring 控制器)。访问页面没有安全性,您可以在浏览器中输入链接,它会呈现结果。

我想要的是找到一种方法来阻止其他网站向此 url 提交请求,除非它们被明确允许。

我构建了一个过滤器,它会拦截到这个页面的所有请求,并执行一些验证。如果验证失败,他们将被重定向到另一个页面。

问题是要执行什么验证...我尝试使用referer字段来查看请求是否来自“允许”站点,但我知道referer字段并不总是被填充并且很容易被伪造。

有没有办法做到这一点?

我们也有 IHS,所以如果那里有什么可以做的,那就太好了。

【问题讨论】:

  • 您的网页是供任何人访问的,还是仅供登录到您网站的人访问?因为如果它只是针对已登录的人,您可以保护它不被未登录到您网站的任何人访问...
  • 我建议用户只需要保护页面的建议:/
  • @Coulton 我们的应用程序在公司内部。该应用程序有SSO,基本上所有员工都会通过SSO。所以它真的允许任何人访问该页面。问题是我不希望其他公司网站链接到此页面,除非我们已授权该网站。

标签: security http spring-security


【解决方案1】:

如果您真的想保护页面不被访问,我建议您实施某种系统以允许用户登录。

您可以尝试检测传入请求的 IP 地址,但我认为这很容易被欺骗。

实际上,公开的页面在您设置的限制范围内可以接受任何形式的询问。也许限制页面返回的数据是一个更实用的选择?

这就是 Facebook 和 Twitter 等网站实施oAuth 以防止未经授权的用户访问资源的原因。

【讨论】:

    【解决方案2】:

    如果引用页面传递了一个名为“token”的 POST 变量,或者您为每个将要访问搜索页面的应用程序设置的值,那么您如何只运行结果。如果您收到对该页面的请求,其中包含查询字符串,但不是“令牌”的 POST 值,那么您知道这是一个未经授权的请求并可以相应地处理它。

    【讨论】:

      【解决方案3】:

      如果您知道可以联系您的服务的站点的 IP,您可以将 Apache 作为代理并使用access control 来允许/拒绝对特定目录/url 的访问。

      【讨论】:

        【解决方案4】:

        我假设您希望避免您的网站被机器人“抓取”,但确实希望允许人类访问您的搜索页面。

        这是一个相当普遍的要求(谷歌“反抓取”)。按健壮性升序(但用户友好性降序):

        • 根据 HTTP 标头(IP 地址、用户代理、引荐来源网址)阻止请求。
        • 实现某种验证码系统
        • 要求用户在访问搜索 URL 之前登录

        你也许可以购买一些现成的魔法(声称)为你做这一切,但如果你的数据足够有价值,那些想要它的人会雇佣机械土耳其人来获取它......

        【讨论】:

          【解决方案5】:

          进行认证安全。 您可以使用 openssl 或 java keytool 进行自签名认证 您必须将证书副本发送给您的客户。

          如果这个客户端没有这个证书,它将无法调用你的服务。

          并在您的 Web 容器中启用证书。我不知道其他容器,但 在 Apache tomcat 中,你可以在你的 server.xml 的连接器标签中做到这一点

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-17
            • 2017-12-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多