原文连接: https://github.com/ly525/blog...
关键字:http-only
, cookie
,sessionid
, vue-router
, react-router
, 安全
,localStorage
, jwt
前端
实现代码vue
// 以 vue-router 为例 // 登陆中间验证,页面须要登陆而没有登陆的状况直接跳转登陆 router.beforeEach((to, from, next) => { const hasToken = document.cookie.includes('sessionid'); // 若是采用 jwt,则一样 hasToken = localStorage.jwt const pathNeedAuth = to.matched.some(record => record.meta.requiresAuth); // 用户本地没有后端返回的 cookie 数据 && 前往的页面须要权限 // if (pathNeedAuth && !hasToken ) { next({ path: '/login', query: { redirect: to.fullPath }, }); } else if (hasToken && to.name === 'login') { // 已登陆 && 前往登陆页面, 则不被容许,会重定向到首页 next({ path: '/', }); } else { next(); } });
应该在进入任何页面以前,判断:react
用户是否已经登陆:本地 cookie (或者 localStorage)包含 session 相关信息git
Cookie: csrftoken=YaHb...; sessionid=v40ld3x....
若是 A页面须要权限
且 本地 cookie中包含了 sessionid 字段
,则容许访问A页面,不然跳转到登陆页面github
response.setCookie
写入前端 ,所以该字段须要和后端同窗确认用户已登陆
&& 在浏览器中输入了登陆页
地址,则将其重定向到首页
用户修改 cookie,伪造 sessionidvue-router
用户伪造的 sessionid
带给后端,这时候就须要后端对 sessionid 进行较验了。好比校验前端带来的 sessionid 与数据库中的 sessionid 是否一致采用 localStorage 而不是 sessionStorage 的缘由(SessionStorage 失效场景)数据库
缘由:sessionStorage 没法跨 Tab 共享
target="_blank"
来打开新页面的时候,会致使会话失效Duplicate
(复制 Tab),sessionStorage 失效