token概念参考
- https://ninghao.net/blog/2834
- https://stackoverflow.com/questions/1592534/what-is-token-based-authentication
- http://www.woshipm.com/pd/877760.html
session和token的区别
- https://security.stackexchange.com/questions/81756/session-authentication-vs-token-authentication
- https://www.zhihu.com/question/51759560
2. 用户注册后验证的激活链接也用到token。例如flask-mail实现这个功能。
详细看flasky中如何实现session和token
3. token可以防止csrf攻击,可以防止表单重复提交。
用Python模拟登录网站时需要获取authenticity_token。
原因: https://www.jianshu.com/p/d73e971da41c
注意: 模拟登录并不是进行CSRF攻击,只是模拟浏览器的行为
import requestsfrom bs4 import BeautifulSoup# cookies中存了sessionID和其他信息,来验证身份和提供信息给服务器# 存取cookies,因为登录页面和登录后的页面的cookies不同,所以如果登录成功后还是用登录前的cookies的话,操作会失败,返回到登录页面。cookie_dict = {}# 1. 获取authenticity_token,或者又叫csrf_token,防止表单重复提交,防止csrf攻击。其实就是token的功能。# 发送http请求,获取登录页面response1 = requests.get(‘https://github.com/login‘)# 实例化文档解析器bss1 = BeautifulSoup(response1.text,‘html.parser‘)# 通过bs找到对应的标签对象,再找到token的值token = s1.find(name=‘input‘,attrs={‘name‘:‘authenticity_token‘}).get(‘value‘)# 获取第一次请求(登录页面)的cookies,以字典的形式。因为requests的接口是要求传入的cookies是字典形式的。cookie_dict.update(response1.cookies.get_dict())# 2. 将用户名,密码和token,登录页面的cookies发送到服务端,post请求进行登录操作。"""utf8:?authenticity_token:ollV+avLm6Fh3ZevegPO7gOH7xUzEBL0NWdA1aOQ1IO3YQspjOHbfnaXJOtVLQ95BtW9GZlaCIYd5M6v7FGUKg==login:asdfpassword:asdfcommit:Sign in"""response2 = requests.post( ???‘https://github.com/session‘, ???data={ ???????"utf8": ‘?‘, ???????"authenticity_token": token, ???????‘login‘: ‘xxx@qq.com‘, ???????‘password‘: ‘xxx‘, ???????‘commit‘: ‘Sign in‘ ???}, ???cookies=cookie_dict)# print(response2.text)# 3. 登录成功后,利用登录后的cookies。进行访问/settings/emails这个页面的操作cookie_dict.update(response2.cookies.get_dict())#response3 = requests.get( ???url=‘https://github.com/settings/emails‘, ???cookies=cookie_dict)print(response3.text)# 4. 操作成功后,将返回的页面写入文件中。(可以本地live server浏览)with open(‘./test1111111.html‘,‘wb‘) as f: ???????f.write(response3.content)
4. 总结
token可保护重要的操作、服务,类似于session,是一种身份验证方法。不用每次都使用username和password去进行身份验证获得服务、操作权限。
WEB - token
原文地址:https://www.cnblogs.com/allen2333/p/9125239.html