Skip to content

Latest commit

 

History

History
70 lines (46 loc) · 3.86 KB

什么是Cookie和Session?他们的区别?Js实现cookie和session两者有联系吗?是什么?.md

File metadata and controls

70 lines (46 loc) · 3.86 KB

什么是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字段来转发到真正服务器上。
        • 收到服务器返回的数据之后,我们就可以实现网页脚本的注入,并返回给用户。
        • 当注入的脚本被执行,用户的浏览器将依次预加载各大网站的常用脚本库。


网站安全性措施有哪些