仅将php脚本限制为一台未登录的计算机

仅将php脚本限制为一台未登录的计算机,php,security,authentication,Php,Security,Authentication,我想让一个php网页只能从一台计算机访问 IP检查不适用于此(动态IP) 我可以用令牌设置cookie(没有过期日期)。然后我可以检查cookie是否具有正确的令牌并显示页面,否则我可能会死掉()。我认为这不是一个安全的解决方案,因为饼干可能会被盗,不是吗 那么,该怎么办 另外,显然我不能每次都登录。您不能在uri中使用唯一的密码短语作为参数吗? e、 g 并检查它是否与服务器中存储的匹配 我知道如果你不是用户,那是其他人。。。然后,您只需要特定的客户端(计算机)就可以访问该页面 无论哪种方式,

我想让一个php网页只能从一台计算机访问

IP检查不适用于此(动态IP)

我可以用令牌设置cookie(没有过期日期)。然后我可以检查cookie是否具有正确的令牌并显示页面,否则我可能会死掉()。我认为这不是一个安全的解决方案,因为饼干可能会被盗,不是吗

那么,该怎么办


另外,显然我不能每次都登录。

您不能在uri中使用唯一的密码短语作为参数吗? e、 g

并检查它是否与服务器中存储的匹配

我知道如果你不是用户,那是其他人。。。然后,您只需要特定的客户端(计算机)就可以访问该页面

无论哪种方式,第一次必须进行某种登记。也许上面的示例uri是这样工作的: 你要求: 检查密码短语是否正确,并在服务器中存储一个布尔值,以确保永远无法再次“注册”。 如果正确,将生成具有唯一密钥的cookie。 同样的密钥也存储在服务器中(文件、数据库或其他)


因此,在后续请求中,当您仅比较存储在服务器中的密钥和cookie中的密钥时,您知道谁是客户端

难道您不能在uri中使用唯一的密码短语作为参数吗? e、 g

并检查它是否与服务器中存储的匹配

我知道如果你不是用户,那是其他人。。。然后,您只需要特定的客户端(计算机)就可以访问该页面

无论哪种方式,第一次必须进行某种登记。也许上面的示例uri是这样工作的: 你要求: 检查密码短语是否正确,并在服务器中存储一个布尔值,以确保永远无法再次“注册”。 如果正确,将生成具有唯一密钥的cookie。 同样的密钥也存储在服务器中(文件、数据库或其他)


因此,在后续请求中,当您仅比较存储在服务器中的密钥和cookie中的密钥时,您就知道谁是客户机了

,因此这里有几个选项:

客户端证书 并将Web服务器配置为使用客户端证书进行身份验证问题已解决。将来,如果需要更多计算机连接到服务器,请同时向它们提供客户端证书

基于IP:使用动态DNS 为您的计算机提供一个动态dns名称(myclient.dyndns.com),并在您的计算机上安装一个dyndns客户端。dyndns客户端不断检查自己的IP,并在计算机的IP发生更改时更新名称服务器条目。在服务器端,您只需检查请求者提供的IP是否与myclient.dyndns.com相同,如果相同,则允许访问
在这一点上有一个小问题,即在IP更改和dyndns客户端将其复制到名称服务器之间有一个小的(可配置的)时间窗口。因此,每当您的IP发生更改时,直到您计算机上的dyndns客户端检测到它并更新名称服务器,您的服务器将不允许在该时间窗口内从您的计算机发出任何请求。这是因为您的计算机将显示新IP,myclient.dyndns.com将解析为旧IP。此时间窗口可以设置为您想要的最小值(甚至1秒)。另一个小问题是,在这个n秒的窗口中,任何获得ISP分配的旧IP的随机计算机都可以访问您的服务器。这种可能性很小,但仅作为一种可能性提及

有很多免费的动态dns服务。你可以用谷歌搜索它们

基于Cookie的 你可以用饼干。但是,正如您正确识别的,cookies可能会被盗。现在,有两种方法可以偷走它们:

  • 从计算机上复制cookie:有权访问计算机的人可以将特定cookie复制到您的Web服务器上,并模拟为您的计算机。如果这是可能的(如果潜在的恶意用户可以远程桌面或物理访问您的计算机),那么基于cookie的解决方案不适合您
  • 通过网络嗅探:可以通过网络轻松嗅探Cookies。防止嗅探的一种简单方法是启用SSL。鉴于您确信不能通过复制从计算机上窃取cookie,cookie+SSL选项适用于您的情况。在这种情况下,它就像一个共享密钥。你可以通过cookie或querystring来实现,这并不重要。Cookie显然比querystring更受欢迎,因为Cookie通常不会记录在浏览器历史记录或Web服务器日志中

还有一个想法:对于所有未经身份验证的计算机,发送一个标准404响应,而不是一些自定义的“拒绝访问”页面。这样,在您的站点上运行爬虫程序/机器人/扫描仪的任何人都不会对此自定义响应感兴趣,也不会试图绕过您的安全控制。

因此,这里有几个选项:

客户端证书 并将Web服务器配置为使用客户端证书进行身份验证问题已解决。将来,如果需要更多计算机连接到服务器,请同时向它们提供客户端证书

基于IP:使用动态DNS 为您的计算机提供一个动态dns名称(myclient.dyndns.com),并在您的计算机上安装一个dyndns客户端。dyndns客户端不断检查自己的IP,并在计算机的IP发生更改时更新名称服务器条目。在服务器端,您只需检查请求者提供的IP是否与myclient.dyndns.com相同,如果相同,则允许访问
在这一点上有一个小问题,即在IP更改和dyndns客户端将其复制到名称服务器之间有一个小的(可配置的)时间窗口。因此,每当您的IP发生更改时,直到您计算机上的dyndns客户端检测到它并更新名称服务器,您的服务器将不允许任何请求