cookies特性

1、前端数据存储

2、后端可以通过http头设置

3、请求时通过http头传给后端

4、前端可读写

图

5、遵守同源策略、(同源:相同端口、协议、域名全部一致的时候)

cookie在浏览器中的特性

域名、有效期、路径

路径就是cookie的层级、如果是/那么、是全网站访问。如果层级是/wenda那么只有/wenda下面的层级可以访问。

图

图

http-only 是只有可以请求的发送和接受中使用cookie

secure 是只有在https的情况下使用。


一般的Cookie都是从document对象中获得的,现在浏览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响,因为Cookie会被放在浏览器头中发送出去(包括ajax的时候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。

Secure和HttpOnly

Secure属性:

当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。

HttpOnly属性:

如果在Cookie中设置了”HttpOnly”属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

PHP中的设置 
 PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中
 ----------------------------------------------------- 
 session.cookie_httponly = 
 ----------------------------------------------------- 
设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启: 
 ----------------------------------------------------- 
 <?php
  ini_set("session.cookie_httponly", 1); 
 // or
  session_set_cookie_params(0, NULL, NULL, NULL, TRUE); 
 ?> 
 ----------------------------------------------------- 
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为: 
 ------------------------------------------------------- 
 setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 
 setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
 ------------------------------------------------------- 
 对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了: 
 ------------------------------------------------------------- 
 <?php
  header("Set-Cookie: hidden=value; httpOnly");
  ?>

在MAC系统中MAMP pro中的php7.1.13中配置文件没有session.cookie_httponly但是可以手动添加上

cookie

<?php
 session_start();
$_SESSION['name']="启东";

然后查看浏览器中的response中去查看

浏览器

在执行控制台发现没有了

console

cookie的作用

存储个性化设置、存储未登录时用户唯一标识、存储已登录用户的凭证、存储其他业务数据。

未登录状态标识、也是主要区分为登录的谁谁、

已登录的用户凭证

1、如果cookie上存储的是明文user_id来识别用户、那么提交数据会相当危险、存在cookie篡改的情况

一般是登录时 在生成sign签名串和user_id 、在提交数据时进行比对。因为生成的sign只有自己的服务器知道、所以安全

2、sessionId

就例如php中生成的sessionId浏览器会带着令牌、去服务器查找这个session信息、因为是无意的随机字符串、所以篡改无风险

Cookies和XSS关系

xss可能偷取cookies

http-only的cookie不会被偷

Cookies和CSRF的关系

csrf利用了用户的cookies

攻击站点无法读写cookies

最好能阻止第三方使用cookies

Cookies-安全策略

签名防篡改、意思是指:我生成一个签名、一个明文数据。我提交时验证签名。

私有变换(加密):发一个加密过后的user_id、之后后台秘钥解开、知道是什么东西。存在解开验证的行为。

http-only(防止xss)

secure 防止传输中的窃取、只限于https

same-site 防止csrf攻击 (兼容性不行只有chrome和欧朋可以)

Last modification:January 22, 2020
如果觉得我的文章对你有用,请随意赞赏