1

情况就是这样,我们有一个由第三方供应商托管和更新的网站。我正在提供指向托管在我们服务器上的其他资源的链接。客户将访问供应商网站并单击链接以访问我们的其他资源。为了验证请求是否来自我们的第三方供应商,我需要获取供应商服务器的 IP 地址。

我的问题是,有没有办法使用 ColdFusion 获取供应商服务器的 IP 地址?我不能使用客户端 IP 地址,我需要客户端使用的供应商服务器地址。

4

4 回答 4

5

您必须与第 3 方合作才能实现这一目标,这是肯定的。

我可以在这里看到至少两种或多或少的工作方法。

(1) 将某种保护令牌附加到链接。您的供应商会生成加密字符串或散列,其中包括一些只有你们两个知道的信息,因此您可以解密(或生成相同的散列)并验证它。

哈希示例:

moment = DateConvert("local2utc", Now());
token = Hash("SecretSaultYouBothKnow" & DateFormat(moment, "yyyy-mm-dd") & TimeFormat(moment, "-HH-mm"));

此令牌通过链接传递并快速过期以防止共享/泄漏。

您可以自己生成和验证它。

这是一个原始的想法,验证可能会出现问题,另外还要避免客户端的无效链接(也可以跳过“mm”掩码)。

加密/解密的字符串将类似地工作。你们俩现在只需要密钥。

顺便说一句,您的供应商可以加密他们的服务器 IP 地址或其他标识符,以便您根据您的数据库检查它,并可能应用一些其他操作。

(2) 您的供应商可以为您设置简单的网络服务来验证传入的链接(它可以以 0/1 或其他简单的方式响应)。

确切的实现可能会有所不同。同样,它可能是 URL 中的某个令牌,您将其发回以进行验证。

这类似于 Jason 建议的解决方案:供应商可以在单击链接时将服务器到服务器的请求发送到您的服务器,然后重新定位到资源。但这可能很复杂,因为您必须确保在客户端到达时已经处理了第一个请求。

希望这些想法有意义。

于 2012-08-14T16:26:24.540 回答
3

不,没有。如果请求直接来自客户端,则不会。如果供应商首先发送某种消息,您可以使用它来验证。或者,如果供应商的服务器是代表客户端发出请求的服务器,那么您可以使用 CGI.REMOTE_ADDR。但是,如果供应商只是提供指向您网站的链接,那么不,您无法确定供应商服务器的 IP。

正如 Jeremy 上面所说,您最接近的方法是检查 HTTP_REFERER,但这很容易被欺骗(很容易),所以它不是很安全。

于 2012-08-14T14:43:16.047 回答
1

要访问 ColdFusion 可用的 CGI 变量,您可以执行以下操作:

<cfset ThisIP = CGI.SERVER_NAME>

这里有许多有用的 CGI 变量:

http://www.perlfect.com/articles/cgi_env.shtml
于 2012-08-14T14:45:53.130 回答
1

尝试在您的服务器上放置一个使用 cfhttp 标签获取的页面: http ://www.dslreports.com/whois

这将为您提供 Web 服务器的 IP 地址。

于 2012-08-14T15:07:16.443 回答