zoukankan      html  css  js  c++  java
  • WEB

    token概念参考

    1. https://ninghao.net/blog/2834
    2. https://stackoverflow.com/questions/1592534/what-is-token-based-authentication
    3. http://www.woshipm.com/pd/877760.html

    session和token的区别

    1. https://security.stackexchange.com/questions/81756/session-authentication-vs-token-authentication
    2. 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 requests
    from bs4 import BeautifulSoup
    
    # cookies中存了sessionID和其他信息,来验证身份和提供信息给服务器
    # 存取cookies,因为登录页面和登录后的页面的cookies不同,所以如果登录成功后还是用登录前的cookies的话,操作会失败,返回到登录页面。
    # 用update整合登录前后的cookies,因为可能有关联。
    cookie_dict = {}
    
    # 1. 获取authenticity_token,或者又叫csrf_token,防止表单重复提交,防止csrf攻击。其实就是token的功能。
    # 发送http请求,获取登录页面
    response1 = requests.get('https://github.com/login')
    # 实例化文档解析器bs
    s1 = 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:asdf
    password:asdf
    commit: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去进行身份验证获得服务、操作权限。

  • 相关阅读:
    jmeter录制移动APP脚本
    java-装箱/拆箱-字符串转换成基本数据类型
    Java-接口和抽象类区别
    Java-适配器
    Java-instanceof关键字
    python递归的使用
    使用pygame库实现小球的运动
    while循环的使用
    python数据类型的介绍,以及练习题
    python变量的内存管理
  • 原文地址:https://www.cnblogs.com/allen2333/p/9125239.html
Copyright © 2011-2022 走看看