的意思PHP setcookie()参数安全



所以我做了一些挖掘,并没有找到一个满意的答案,我的问题关于PHPsetcookie()参数secure。文档是这样说的:

表示cookie只能通过安全的HTTPS连接从客户端传输。当设置为true时,只有在存在安全连接时才会设置cookie。在服务器端,程序员只能在安全连接(例如关于$_SERVER["HTTPS"])上发送这种cookie。

我不明白的是最后一部分。"在服务器端[…]"是什么意思?

我做了一些测试,在我的本地机器上,当secure设置为true时,即使没有https, cookie也会设置。在我的网络服务器上,它们不是。那么,即使没有https,浏览器也会认为localhost是安全的吗?

我都将secure设置为true并检查$_SERVER["HTTPS"]以确保安全,但我想知道secure究竟做了什么,或者它没有做什么。

最诚挚的祝福和感谢!

setcookie()secure参数将指示客户端/浏览器仅在HTTPS请求时发送cookie。

但是,即使您不使用HTTPS, cookie也将在客户端上设置。这就是你可以使用$_SERVER["HTTPS"]的地方,检查你是否真的应该发送cookie和你的服务器的响应。

但是在客户端只使用HTTP的所有请求中,cookie信息将会丢失。

在php代码中使用服务器设置cookie,如:

的例子:

<?php
$COOKIESET     = [
'expires'     => '0'
,'path'        => /
,'domain'      => 'YOURDOMAIN OR YOURIP'
,'secure'      => 'true'
,'httponly'    => 'true'
,'samesite'    => 'Strict'
];
setcookie("NAME",   "VALUE",    $COOKIESET);
?>

SECURE在cookie中的使用:

这意味着浏览器只会在当前连接被加密(SSL/TLS)时发送cookie。只能在加密连接下使用

$ _SERVER("HTTPS"请求有时在某些web服务器上没有结果,所以尝试从这个帖子中使用:

如何使用HTTPS找出如果你没有$ _SERVER("HTTPS")

function isSecure() {
return
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| $_SERVER['SERVER_PORT'] == 443;
}

或:


$isSecure = false;
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$isSecure = true;
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
$isSecure = true;
}
$REQUEST_PROTOCOL = $isSecure ? 'https' : 'http';

也检查一下:

会话。

来自:

可以从不安全的HTTP连接设置安全cookie吗?如果是这样,为什么是允许的?

安全cookie可以在不安全的通道(例如HTTP)上设置,详见RFC 6265的4.1.2.5节。它明确地提到安全标志只提供机密性而不提供完整性,因为安全标记的cookie仍然可以从不安全的通道设置,覆盖任何先前设置的值(通过安全通道或其他方式):

HttpOnly在cookie中的使用:

HttpOnly Cookie是添加到浏览器Cookie中的标签,用于阻止客户端脚本访问数据。它提供了一个门,防止专门的cookie被服务器以外的任何东西访问。

相关内容

  • 没有找到相关文章

最新更新