代码之家  ›  专栏  ›  技术社区  ›  martijn_himself

如何获取发起重定向的服务器的IP

  •  1
  • martijn_himself  · 技术社区  · 14 年前

    我希望你能帮助我回答以下问题:

    用户单击页面中的超链接。服务器A处理请求并将客户端重定向到服务器B上的URL(更具体地说,我使用的是服务器A上.NET中的response.redirect方法)。

    我被要求将对服务器B的访问限制为仅从服务器A发起的重定向(通过阻止服务器A以外的IP)。起初,我认为可以通过使用HTTP“referer”头来实现这一点,但是,似乎是由浏览器将其设置为一个URL(而不是IP),并不能保证这样做。

    我想没有办法在.NET中的服务器A上设置HTTP“referer”(到服务器A的IP)?(我的直觉是那将是一个安全漏洞)。所以我的问题是,如何限制对服务器B的访问以重定向来自服务器A?

    感谢您的帮助,

    马蒂恩

    3 回复  |  直到 14 年前
        1
  •  1
  •   Chris Diver    14 年前

    不,您不能这样做,浏览器只在特定条件下设置引用,客户机可以欺骗它。

    referer头是一个请求头,而不是响应头,因此服务器A无法设置该头。

    只要您控制这两个服务器,就必须在服务器端(可能是令牌)执行一些操作,然后将令牌作为参数传递到重定向到的URL中。

        2
  •  2
  •   Tim Mahy    14 年前

    您可以在重定向过程中发送已签名的消息,以便服务器B可以验证它是否由服务器A签名。

        3
  •  1
  •   Mostafa Elmoghazi    14 年前

    我来告诉你我是如何理解你的问题的: 您有一组分布在两个服务器A(p1,p2)和B(p3,p4)上的网页(p1,p2,p3,p4)。 客户机可以单击指向页面p1、p2的链接,该页面通过服务器a将用户重定向到页面p3、p4到服务器b。

    您希望用户受到限制,这样他们就不能访问页面p3、p4。换言之,get server b限制访问p3、p4页,除非通过服务器a生成的重定向。

    如果我的观点是这样的,您可以让服务器A在重定向时向URL追加一个查询字符串,让服务器B检查该查询字符串,而不是使用响应。从服务器A重定向您可以使用服务器.transfer,以便对用户隐藏该URL。