我有一个有函数的类,比如class.php:
class fun {
public function get_cookie() {
$old_cookie = $_COOKIE['mycookie'];
}
public function ssl() {
//redirect from http to https
}
在另一个php文件中,让我们说index.php:
//include fun class
$fun = new fun;
$fun->ssl();
$fun->get_cookie();
我的问题是,因为函数get_cookie是在$ fun-> ssl()之后,用户是否发送加密的cookie?或者由于cookie代码是在$ fun-> ssl()执行之前编码的,所以cookie是以未加密的方式发送的?
答案 0 :(得分:3)
切勿通过需要加密的Cookie发送任何内容。
无论对此处提出的实际问题的答案如何,您的cookie内容应被视为公开可访问且不安全。
首先,每个网络请求都会发送(两个方向)网站的整套Cookie。因此,即使您在此特定请求中使用SSL成功加密它们,用户也只需要为您网站上的图像发出纯HTTP请求,然后他就会传输它们并将其发送回未加密状态。
其次,在网站之间泄露Cookie并不是闻所未闻。存在许多跨站点脚本黑客攻击,可以让第三方获取用户的cookie。这些不会以加密方式存储在用户的计算机上,即使它们是通过SSL发送的。
所以我将再次重复我的初步陈述:永远不要通过cookie发送任何你需要保密的东西。
答案 1 :(得分:1)
Wikipedia article对Cookie的工作方式有很好的解释。基本上,cookie与请求标头一起发送。因此,除非通过HTTPS
建立连接,否则cookie将以明文形式发送。
答案 2 :(得分:1)
在代码运行之前发送cookie。 PHP读取标题,填充全局变量$ _COOKIE []然后执行您的代码。因此,如果某人使用HTTP发出请求,他将获得未加密的cookie。
创建cookie时,您可以定义cookie仅发送到使用HTTPS请求的页面。您可以使用带有session_set_cookie_params()
参数的函数setcookie()
或$secure
执行此操作。如果使用HTTP请求页面,则不会发送此类cookie。