我已经编写了几个PHP Web服务,我通过URL传递参数。为了防止未经授权的访问,我传入一个唯一的密钥作为其中一个参数。我通过HTTPS调用PHP文件,我想知道如果没有使用HTTPS,我是否可以阻止脚本运行。
答案 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
标头,这将阻止随后的未加密访问(尽管显然在发送标头之前仍可能发生未加密的访问。)
答案 3 :(得分:0)
如果您使用的是Apache,则可以使用mod_rewrite将http请求重定向为https请求。
例如这就是我们使用的:
RewriteCond %{HTTPS} !=on
RewriteRule ^account(.*) https://%{SERVER_NAME}/account$1 [R=301,L]
答案 4 :(得分:0)
您可以阻止服务器响应未加密的请求,但是您无法阻止客户端发送它,这对于密码安全性来说同样糟糕。到目前为止,在URL中放置一个秘密令牌是最糟糕的问题:它保留在浏览器历史记录中,当用户离开您的站点时可以在引用者中看到它,并且用户访问的任何网站都可以启动一个粗暴的 - 通过:visited
CSS伪类强制或字典攻击。总而言之,这是一个非常可怕的想法 - 您最好使用仅使用SSL的cookie。