2012-07-18 73 views
3

PHP有可能获得请求的证书,特别是证书和CA上的网站名称?PHP - 检查请求的SSL证书

我想检查一下对我的PHP文件的调用只能通过AJAX调用从我的网站进行。就像这样:

  1. 用户登录到我的网站,然后使用HTTPS进行
  2. 用户加载页面https:// domain/mypage.php
  3. https:// domain/mypage.php在getinfo.php我一个AJAX调用https:// domain/getinfo.php

随后的互动希望检查请求的证书详细信息,以确保请求是从我的网站发出的,即不是来自URL上的直接命中,也不是使用抓取工具。

可能吗?

+4

简答:没有。不管你做什么,总会有可能欺骗请求,看起来它来自Ajax。说实话,我甚至无法证实这种证书方法如何工作 - 相同的证书将用于所有请求,不管是否使用Ajax,除非您要求客户端证书(这是一个总的PITA for你的用户)你会看到的证书永远是服务器端的证书,这显然没有告诉你什么。考虑一下websockets,这会告诉你更多。 – DaveRandom 2012-07-18 13:00:22

+1

*服务器证书*将确保服务器的身份。由于你的服务器已经收到请求,我敢肯定你可以确定你的服务器本身就是真的。你想在这里保护什么? – deceze 2012-07-18 13:44:37

+0

我试图确保对我的getinfo.php的调用来自我的网站,而不是来自试图通过点击URL来窃取我的(非常昂贵的)数据的人。所以我宁愿不给人们一个他们可以访问的URL并以JSON格式获取数据,我想尽可能地让它变得困难,并且至少排除他们从getinfo.php中获取它 – BigMeat 2012-07-18 15:31:05

回答

0

我试图确保对我的getinfo.php的调用来自我的网站,而不是来自试图通过点击URL来窃取我的(非常昂贵的)数据的人。

你的意思是你想确保呼叫您getinfo.php从正在访问您的网站客户端产生的?这是一个重要的区别。 “您的网站”不会产生请求,客户端访问网站是。无论客户端在发送请求时是否仍然打开您的站点,都无法检测到,每个请求看起来都与其他请求完全相同。

可能要求客户端发送请求中的令牌,他在打开您的网站时必须获得该令牌。通常这是一个cookie和/或会话ID。没有有效的cookie /会话,您将不会回答客户端。

这样仍然可以在不打开页面的情况下抓取数据,只需发出一个请求即可获取cookie,另一个请求获取数据。

对于所有意图和目的,如果API /站点是公开的,数据也是如此。如果你真的想保护它,你必须要求用户认证,并小心你给这些帐户的人。这也使得审计和可能的禁止似乎刮掉你的数据的用户。

0

另一种方式是一次性GET/POST令牌,就像您将令牌与有效期一起保存,然后您将令牌和脚本命令使用https://example.com/getinfo.php?t=token例如 您给客户端数据并删除令牌,以便没有人可以使用已使用的令牌。

在任何情况下,您似乎都是通过SSL进行调用的,这是好的,因为通过HTTP,令牌无论它的get或post是完全可见的,所以如果攻击者关闭连接,然后尝试得到的URL是不好的。

任何类型的恶意软件都可以做同样的事情,因为在传输数据(令牌,甚至是你的“信息”)很可能在RAM中未加密,所以它可以在没有人注意的情况下被拾取。