如果调用者未使用HTTPS,如何阻止访问PHP文件?

时间:2010-09-16 18:15:38

标签: php web-services https

我已经编写了几个PHP Web服务,我通过URL传递参数。为了防止未经授权的访问,我传入一个唯一的密钥作为其中一个参数。我通过HTTPS调用PHP文件,我想知道如果没有使用HTTPS,我是否可以阻止脚本运行。

5 个答案:

答案 0 :(得分:8)

稍微偏离主题,但如果您将PHP与Apache Httpd和mod_ssl一起使用,则可以通过将SSLRequireSSL指令放在.htaccess中来强制对文件(和PHP脚本)进行SSL访问或者在目录配置中。

答案 1 :(得分:3)

if(empty($_SERVER['HTTPS'])) {
    // ....
    exit;
}

答案 2 :(得分:1)

澄清一下:您希望客户端不通过非加密连接调用包含秘密令牌的URL,是吗?如果是这样,那么问题主要不在于您,而在于客户端的浏览器。您可以将客户端重定向到安全连接,如果他还没有使用,但即使您这样做客户端已经向您的服务器发出了不安全,可拦截的请求,然后才能重定向! / p>

Mozilla正在努力解决这个问题。从Firefox 4开始,服务器可能会发送Strict-Transport-Security标头,这将阻止随后的未加密访问(尽管显然在发送标头之前仍可能发生未加密的访问。)

Further reading at hacks.mozilla.org

答案 3 :(得分:0)

如果您使用的是Apache,则可以使用mod_rewrite将http请求重定向为https请求。

例如这就是我们使用的:

RewriteCond %{HTTPS} !=on
RewriteRule ^account(.*) https://%{SERVER_NAME}/account$1   [R=301,L]

这会将http://domain/account重定向到https://domain/account

答案 4 :(得分:0)

您可以阻止服务器响应未加密的请求,但是您无法阻止客户端发送它,这对于密码安全性来说同样糟糕。到目前为止,在URL中放置一个秘密令牌是最糟糕的问题:它保留在浏览器历史记录中,当用户离开您的站点时可以在引用者中看到它,并且用户访问的任何网站都可以启动一个粗暴的 - 通过:visited CSS伪类强制或字典攻击。总而言之,这是一个非常可怕的想法 - 您最好使用仅使用SSL的cookie。