Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果调用方不是';你不使用HTTPS吗?_Php_Web Services_Https - Fatal编程技术网

Php 如果调用方不是';你不使用HTTPS吗?

Php 如果调用方不是';你不使用HTTPS吗?,php,web-services,https,Php,Web Services,Https,我已经编写了几个PHP web服务,其中我通过URL传递参数。为了防止未经授权的访问,我传入一个唯一的密钥作为参数之一。我通过HTTPS调用PHP文件,我想知道如果不使用HTTPS,是否有办法阻止脚本运行。稍微偏离主题,但如果您将PHP与Apache Httpd和mod_ssl一起使用,则可以强制ssl访问文件(和PHP脚本)通过将指令放在.htaccess或目录配置中。如果使用Apache,可以使用mod_rewrite将http请求重定向为https请求 if(empty($_SERVER[

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

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

如果使用Apache,可以使用mod_rewrite将http请求重定向为https请求

if(empty($_SERVER['HTTPS'])) {
    // ....
    exit;
}
例如,这是我们使用的:

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

这将重定向到

以澄清:您希望客户端不会通过非加密连接调用包含秘密令牌的url,对吗?如果是这样,那么问题主要不在于您,而在于客户端的浏览器。如果客户端尚未使用安全连接,您可以将其重定向到安全连接,但即使您这样做,客户端在重定向之前已经向您的服务器发出了不安全的可拦截请求

Mozilla正在努力解决这个问题。从Firefox 4开始,服务器可能会发送一个
严格的传输安全
头,这将阻止随后的未加密访问(尽管很明显,在发送头之前,仍然可能发生未加密访问)


您可以阻止服务器响应未加密的请求,但不能阻止客户端发送请求,这对密码安全同样有害。这并不是在URL中放置秘密令牌的最严重问题:它保留在浏览器历史记录中,当用户离开您的站点时,它可以在引用中看到,用户访问的任何网站都可以通过
:visted
CSS伪类发起暴力或字典攻击。总而言之,这是一个非常可怕的想法-最好使用仅限SSL的cookies。

请注意,如果您让浏览器向您的服务发送一些秘密令牌,那么您应该担心的不是服务器接受什么,而是客户机发送什么。如果您的服务器也在同一地址上侦听纯HTTP,而客户端错误地向该地址发出请求,则攻击者可能会通过HTTPS拦截并复制该请求(与不使用安全cookie的问题类似)。另请参见这如何阻止URL(及其秘密令牌)在重写之前发送到普通HTTP服务器?@Bruno:True,这不会阻止发送秘密令牌。回答错误:)+1,从根本上解决问题。更好的办法是,甚至不要听那个地址上的端口80。谢谢你们的帮助。我来试试。这是IIS上的。