版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/harryhare/article/details/83099012
主要是想推荐一下这篇:
下文是看过后自己的理解。顺便说下这个人的其他文章也很赞。
session 和 token
session id 比较常见,就不多说了,这里先科普下无状态的token验证:
干掉状态:从session到token
图是从上面的链接中偷的。
总结下,就是:
login_handler(){
signature = hash(user_info, private_secret)
token = (user_info: signature)
send_to_client( token )
}
request_handler(){
token=receive_from_client()
signature = hash(user_info, private_secret)
if (token.signature != signature){
send_to_client("wrong signature")
return
}
// todo process request
}
XSS 和 CSRF
基本概念:
-
XSS(Crossing Site Script)
例子:坏蛋在某网站的可编辑部分注入脚本,脚本发送信息到坏蛋的服务器后台,坏蛋收集到网站的用户信息/cookie。
根源:网站没有对用户输入的信息做过滤。 -
CSRF(Crossing Site Recource Forge )
例子:坏蛋在他们自己网站上加入对某网站API的调用,由于浏览器会自动填充cookie信息,所以如果网站后端只是用cookie认证,则API 会在用户不知情的情况下被执行。比如用户在不知情的情况下,向坏蛋转账了100块。
根源:网站服务器没有拒绝跨域请求。传统的post表单总是可以跨域(application/x-www-form-urlencoded)?
cookie 的三个属性:
-
Secure;
只有https 请求,cookie才会被携带。避免http的问题。 -
HttpOnly;
用js 读不到?只是会在发送时自动携带。避免针对cookie的XSS -
Same-Site=strict;
只有在相同网站中才会填充cookie。避免CSRF