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但是可以手动添加上
<?php
session_start();
$_SESSION['name']="启东";
然后查看浏览器中的response中去查看
在执行控制台发现没有了
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和欧朋可以)