什么是Cookie和Session?他们的区别?Js实现cookie和session两者有联系吗?是什么?
-
Cookie:指某些网站为了辨别用户身份而存储在用户本地终端上的数据。
-
内存cookie,由浏览器维护,保存在内存中,浏览器关闭就小时,存在时间短暂。
-
硬盘 Cookie,保存在硬盘中,除非用户手工清理或到了过期时间,一般不会删除。
-
用途
-
服务器可以设置或读取 Cookies 中包含的信息,借此维护用户跟服务器会话中的状态
-
因为 HTTP 协议是无状态的,就是说服务器不知道用户上一次做了什么,为实现交互,就用 Cookie 来记录。
比如,网上购物,用户选购了一个商品,服务器在向用户发送网页时还发送一段记录商品信息的 Cookie,当用户访问另一个页面,浏览器会把 Cookie 发送给服务器端,于是服务器就知道用户选购了什么。
-
登录网站勾选“下次自动登录”,那么下次访问就不用再输入密码等信息。
-
这是因为在第一次登录时,如果勾选了自动登录,那么服务器发送包含登录凭据(用户加密码的某种加密形式)的 Cookie 到用户的硬盘上,第二次登录的时候,浏览器就会发送该 Cookie,服务器验证凭据,就不用再次输入密码等。
-
-
缺点:
- Cookie 会被附加到每个 HTTP 请求中,无形增加了流量
- HTTP请求中的 Cookie 是明文传递,安全性成问题。(HTTPS 不会)
- Cookie 大小限制在 4KB,对于复杂的存储需求是不够用的
-
XSS 注入的风险,XSS(cross-site scripting跨域脚本攻击)
-
Reflected XSS(基于反射的XSS攻击)
-
做个假设,当亚马逊在搜索书籍,搜不到书的时候显示提交的名称。
-
在搜索框搜索内容,填入“<script>alert('handsome boy')</script>”, 点击搜索。
-
当前端页面没有对返回的数据进行过滤,直接显示在页面上, 这时就会alert那个字符串出来。
-
进而可以构造获取用户cookies的地址,通过QQ群或者垃圾邮件,来让其他人点击这个地址:
-
措施:
- 前端在显示服务端数据时候,不仅是标签内容需要过滤、转义,就连属性值也都可能需要。
- 后端接收请求时,验证请求是否为攻击请求,攻击则屏蔽。
-
Stored XSS(基于存储的XSS攻击)
-
\1. 发一篇文章,里面包含了恶意脚本
今天天气不错啊!<script>alert('handsome boy')</script>
\2. 后端没有对文章进行过滤,直接保存文章内容到数据库。
\3. 当其他看这篇文章的时候,包含的恶意脚本就会执行。
PS:因为大部分文章是保存整个HTML内容的,前端显示时候也不做过滤,就极可能出现这种情况。
-
首要是服务端要进行过滤,因为前端的校验可以被绕过。
-
当服务端不校验时候,前端要以各种方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。
-
-
DOM-based or local XSS(基于DOM或本地的XSS攻击)
- 提供一个免费的wifi。
- 开启一个特殊的DNS服务,将所有域名都解析到我们的电脑上,并把Wifi的DHCP-DNS设置为我们的电脑IP
- 之后连上wifi的用户打开任何网站,请求都将被我们截取到。我们根据http头中的host字段来转发到真正服务器上。
- 收到服务器返回的数据之后,我们就可以实现网页脚本的注入,并返回给用户。
- 当注入的脚本被执行,用户的浏览器将依次预加载各大网站的常用脚本库。
-
-
网站安全性措施有哪些