接触过网络爬虫的小伙伴们应该都知道requests库,这个是一个非常实用,而且容易上手的爬虫库,相比于Python自带的urllib库来说,这个requests库真的非常讨人喜欢,小编也非常的喜欢用它。...但是最近在网络爬虫的过程中,发现一个让人头大的问题。Python3使用requests 抓取信息时遇到304状态码。。。...这有些让我摸不着头脑,从返回的状态码来看,应该抓取的内容没有抓取到,查询资料得知是由于请求的header中包含以下两个键值对,那么每次请求将这两个值赋值为空解决了问题: If-None-Natch,If-Modified-Since... 我定义了一个动态获取的header的函数,其中USER_AGENTS是一个包含很多User-Agent的数组: def get_header(): return {...: 'gzip, deflate', 'If-None-Natch':'', 'If-Modified-Since':'' } 希望下次遇到该问题的小伙伴们
无状态登录 session 需要在数据库中保持用户及 token 对应信息,所以叫 有状态。 试想一下,如何在数据库中不保持用户状态也可以登录。...改进:对 user_id 进行对称加密 服务端对 user_id 进行对称加密后,作为 token 返回客户端,作为用户状态凭证。...图形验证码 在登录时,输入密码错误次数过多会出现图形验证码。 图形验证码的原理是给客户端一个图形,并且在服务器端保存与这个图片配对的字符串,以前也大都通过 session 来实现。...案例 思考以下几个关于登录的问题如何使用 session 以及 jwt 实现,来更加清楚 jwt 的使用场景 当用户注销时,如何使该 token 失效 因为 jwt 无状态,不保存用户设备信息,没法单纯使用它完成以上问题...如何显示该用户登录设备列表 / 如何踢掉特定用户 session: 在 token 表中新加列 device jwt: 需要服务器端保持设备列表信息,做法与 session 一样,使用 jwt 意义不大
无状态登录 session 需要在数据库中保持用户及token对应信息,所以叫 有状态。 试想一下,如何在数据库中不保持用户状态也可以登录。...图形验证码 在登录时,输入密码错误次数过多会出现图形验证码。 图形验证码的原理是给客户端一个图形,并且在服务器端保存与这个图片配对的字符串,以前也大都通过 session 来实现。...可以把验证码配对的字符串作为 secret,进行无状态校验。...思考以下几个关于登录的问题如何使用 session 以及 jwt 实现 当用户注销时,如何使该 token 失效 因为 jwt 无状态,不保存用户设备信息,没法单纯使用它完成以上问题,可以再利用数据库保存一些状态完成...如何显示该用户登录设备列表 / 如何踢掉特定用户 session: 在 token 表中新加列 device jwt: 需要服务器端保持设备列表信息,做法与 session 一样,使用 jwt 意义不大
之前我讲解了如何编写一个自己的 Jwt 生成器以及如何在用户认证通过后返回 Json Web Token 。今天我们来看看如何在请求中使用 Jwt 访问鉴权。DEMO 获取方法在文末。 2....步骤1:跟基础认证一样,只不过返回带 WWW-Authenticate 首部字段的响应。该字段内包含质问响应方式认证所需要的临时咨询码(随机数,nonce)。...该字符串通常推荐由 Base64 编码的十六进制数的组成形式,但实际内容依赖服务器的具体实现 步骤2:接收到 401 状态码的客户端,返回的响应中包含 DIGEST 认证必须的首部字段 Authorization...因为 HTTP 是无状态的,所以浏览器使用 Cookie 来保存 sessionId。...Bearer Authentication 是一种基于令牌的 HTTP 身份验证方案,用户向服务器请求访问受限资源时,会携带一个 Token 作为凭证,检验通过则可以访问特定的资源。
每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。...更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可. 去耦: 不需要绑定到一个特定的身份验证方案。...的签发者,是否使用是可选的; sub: 该JWT所面向的用户,是否使用是可选的; aud: 接收该JWT的一方,是否使用是可选的; exp(expires): 什么时候过期,这里是一个Unix时间戳,是否使用是可选的...比如在浏览器端通过用户名/密码验证获得签名的Token被木马窃取。即使用户登出了系统,黑客还是可以利用窃取的Token模拟正常请求,而服务器端对此完全不知道,以为JWT机制是无状态的。...; 针对这类攻击的办法使用HTTPS,包括针对分布式应用,在服务间传输像cookie这类敏感信息时也采用HTTPS;所以云计算在本质上是不安全的。
每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。...更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可. 去耦: 不需要绑定到一个特定的身份验证方案。...比如在浏览器端通过用户名/密码验证获得签名的Token被木马窃取。即使用户登出了系统,黑客还是可以利用窃取的Token模拟正常请求,而服务器端对此完全不知道,以为JWT机制是无状态的。...if payload['iat'] > now || payload['exp'] < now # 返回401 end # 下面将检查确保这个JWT之前没有被使用过 # 使用...; 针对这类攻击的办法使用HTTPS,包括针对分布式应用,在服务间传输像cookie这类敏感信息时也采用HTTPS;所以云计算在本质上是不安全的。
最佳实践 请求设计规范 URI 使用名词,尽量使用复数,如/users URI 使用嵌套表示关联关系,如/users/123/repos/234 使用正确的 HTTP 方法,如 GET/POST/PUT...animal_type_id=1:指定筛选条件 状态码 错误处理 就像 HTML 的出错页面向访问者展示了有用的错误消息一样,API 也应该用之前清晰易读的格式来提供有用的错误消息。...为此 RFC 6585 引入了 HTTP 状态码429(too many requests)。加入速度设置之后,应该给予用户提示。...Status,如 200/400 发送 Body,如{name: 'jack'} 发送 Header,如 Allow、Content-Type 编写控制器的最佳实践 每个资源的控制器放在不同的文件里 尽量使用类...是否支持多文件上传BooleantrueonFileBegin文件上传前的一些设置操作Functionfunction(name,file){} koa-json-error 在写接口时,返回json格式且易读的错误提示是有必要的
每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。...对象匹配来实现状态管理的。...更适用CDN 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可。 去耦 不需要绑定到一个特定的身份验证方案。...即使用户登出了系统,黑客还是可以利用窃取的Token模拟正常请求,而服务器端对此完全不知道,以为JWT机制是无状态的。...针对这类攻击的办法使用HTTPS,包括针对分布式应用,在服务间传输像cookie这类敏感信息时也采用HTTPS;所以云计算在本质上是不安全的。
问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的子进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程的退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它的返回代码...[ $rc -ne 0 ] && break # 若子进程以非零退出码结束,则跳出循环 done #echo $rc exit $rc 将代码保存为文件 wait_procs_demo.sh,再运行测试
使用OAuth 2.0、JWT等标准进行访问授权,通过细粒度的角色和权限控制,限制不同用户或应用对API资源的访问级别。...只有携带有效JWT令牌的请求才能访问/protected端点,获取用户特定数据。3....输入验证与过滤严格执行输入验证,确保所有API接收的数据符合预期格式、类型和范围。使用白名单策略,允许特定字符集,拒绝包含SQL注入、XSS攻击等恶意内容的输入。...异常处理与日志记录完善API异常处理机制,确保在遇到错误或异常时能够返回有意义的错误消息,避免泄露内部细节。同时,详细记录所有API调用及其响应状态,便于审计和故障排查。...设置警报阈值,如异常响应率、请求频率突增等,确保在出现安全事件时能及时通知相关人员。四、结论API安全是企业信息安全的重要组成部分,防止数据泄露与业务逻辑漏洞是其中的核心议题。
这两个一般在我们的系统中被结合在一起使用,目的就是为了保护我们系统的安全性。 2. 什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?...如何使用Session进行身份验证? Session 的主要作用就是通过服务端记录用户的状态。...典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。...服务器向用户返回一个 SessionID,写入用户的 Cookie。 当用户保持登录状态时,Cookie 将与每个后续请求一起被发送出去。...身份验证服务响应并返回了签名的 JWT,上面包含了用户是谁的内容。 用户以后每次向后端发请求都在Header中带上 JWT。 服务端检查 JWT 并从中获取用户相关信息。
认知:HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据。...每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。...用户同意,GitHub 就会重定向回 A 网站,同时发回一个授权码; C. A 网站使用授权码,向 GitHub 请求令牌; D. GitHub 返回令牌; E....A 网站使用令牌,向 GitHub 请求用户数据; 其他授权模式 授权码模式(authorization code)是功能最完整、流程最严密的授权模式。...例如:QQ,我在QQ空间登录一次,我可以去访问QQ产品的其他服务:QQ邮箱、腾讯新闻等,都能保证你的账户保持登录状态。 延伸阅读: 《如何实现单点登录?》[11] 《手机扫码登录内网怎么实现的?》
额,社会本就复杂别再欺骗自己了好么,被你在客户端删掉的JWT还是可以通过服务器端认证的。 使用JWT要非常明确的一点:JWT失效的唯一途径就是等待时间过期。...不使用外力保存JWT的状态,你说如何实现注销失效? 常用的方案有两种,白名单和黑名单方式。 1、白名单 白名单的逻辑很简单:认证通过时,将JWT存入redis中,注销时,将JWT从redis中移出。...2、黑名单 黑名单的逻辑也非常简单:注销时,将JWT放入redis中,并且设置过期时间为JWT的过期时间;请求资源时判断该JWT是否在redis中,如果存在则拒绝访问。...白名单和黑名单这两种方案都比较好实现,但是黑名单带给服务器的压力远远小于白名单,毕竟注销不是经常性操作。 黑名单方式实现 下面以黑名单的方式介绍一下如何在网关层面实现JWT的注销失效。...由于令牌已经注销了,因此肯定访问不通接口,返回如下: 图片 源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9529 获取!
如果经常需要用户重新登录,显然这种体验不是太好,因此很多应用会采用token过期后自动续期的方案,只有特定条件下才会让用户重新登录。...发起请求,请求成功; 如果要实现每隔72小时,必须重新登录,后端需要记录每次用户的登录时间;用户每次请求时,检查用户最后一次登录日期,如超过72小时,则拒绝刷新token的请求,请求失败,跳转到登录页面...双token方案 登录成功以后,后端返回 access_token 和 refresh_token,客户端缓存此两种token; 使用 access_token 请求接口资源,成功则调用成功;如果token...如果过期,拒绝刷新,客户端收到该状态后,跳转到登录页;如果未过期,生成新的 access_token 返回给客户端。 客户端携带新的 access_token 重新调用上面的资源接口。...微信网页授权是通过OAuth2.0机制实现的,也使用了双token方案。 微信网页授权方案 用户在第三方应用的网页上完成微信授权以后,第三方应用可以获得 code(授权码)。
这两个一般在我们的系统中被结合在一起使用,目的就是为了保护我们系统的安全性。 2. 什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?...举个简单的例子你在网上购物的时候,因为HTTP协议是没有状态的,如果服务器想要获取你在某个页面的停留状态或者看了哪些商品,一种常用的实现方式就是将这些信息存放在Cookie 2.2 如何在服务端使用 Cookie...典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。...服务器向用户返回一个 SessionID,写入用户的 Cookie。 当用户保持登录状态时,Cookie 将与每个后续请求一起被发送出去。...身份验证服务响应并返回了签名的 JWT,上面包含了用户是谁的内容。 用户以后每次向后端发请求都在Header中带上 JWT。 服务端检查 JWT 并从中获取用户相关信息。
授权(Authorization):确认特定用户可以访问特定资源或被授予执行特定操作的权限。...验证码暴力破解 Facebook的主站设置速率限制及锁定机制,但子域beta.facebook.com通过短信/邮件找回密码时,验证码OTP未进行速率限制,导致有效时间内可爆破6位验证码: 爆破成功跳转进入设置新密码界面...如忘记密码,获取短信验证码后填写错误验证码,返回401: 将返回包中状态码401改为200,依旧失败: 将整个返回包修改为200,成功进入填写新密码的页面: TIPS:可先探测操作成功的返回包,并将错误返回进行整包替换...另一个参数相关的Paypal漏洞:使用其他方式如密保方式找回密码: 请求包中将两个密保参数SecurityQuestion删除: 成功绕过验证: 7)open redirect窃取jwt 开放重定向的其一利用手段...(传送门),在用户登录之后再次请求登录跳转链接: 发现Location附带了用户凭证jwt,只要获取这个token值就获取了用户权限: 诱使用户点击跳转,访问受害者服务器的PHP文件,内容为: 攻击者通过查看日志获取受害者
; 服务器: 接收到数据并自动为该用户创建特定的 Session / Session ID,来标识用户并跟踪用户当前的会话过程; 客户端: 浏览器收到响应获取会话信息,并且会在下一次请求时带上 Session.../ Session ID; 服务器: 服务器提取后会与本地保存的 Session ID进行对比找到该特定用户的会话,进而获取会话状态; 至此客户端与服务器的通信变成有状态的通信; 特点: Session...." + base64UrlEncode(payload), secret) 复制代码 4.3 JWT 的使用方式 客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在...、待确认阶段、已确认阶段) 待扫码阶段: PC端: 打开某个网站 (如taobao.com) 或者某个 APP (如微信) 的扫码登录入口;就会携带 PC 端的设备信息向服务端发送一个获取二维码的请求;...和二维码 ID 作为参数发送给服务端,此时手机必须是已登录(使用扫描登录的前提是移动端的应用为已登录状态,这样才可以共享登录态)。
每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。...更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可. 去耦: 不需要绑定到一个特定的身份验证方案。...{ "typ": "JWT", "alg": "HS256" } 载荷(Payload) iss: 该JWT的签发者,是否使用是可选的; sub: 该JWT所面向的用户,一般是用户名,是否使用是可选的...拦截器验证 controller中的角色验证码(后期可以使用切面将其提取出来) /** * 删除用户 * @param id * @return */ @DeleteMapping("/{...JWT Token不需要持久化在任何NoSQL中,不然背离其算法验证的初心 在退出登录时怎样实现JWT Token失效呢?
基于Session的授权机制需要服务端来保存这个状态,而使用JWT则可以跳过这个问题,并且使我们设计出来的API满足RESTful规范。即,我们API的状态应该是没有状态的。...因此人们提出了JWT来解决这一系列的问题。 通过JWT我们可以更方便地写出适用于前端应用的认证方案,如登陆、注册这些功能。...当我们使用JWT来实现我们的注册、登陆功能时,我们在登陆的时候将向我们的服务器发送我们的用户名和密码,服务器验证后将生成对应的Token。...在下次我们进行页面操作的时候,如访问/Dashboard时,发出的HTTP请求的Header中会包含这个Token。...即在特定的的时间间隔里,由浏览器对服务器发出HTTP请求,然后浏览器便可以从服务器获取最新的技术。如下图所示的是Google Chrome申请开发者账号时发出的对应的请求: ?
领取专属 10元无门槛券
手把手带您无忧上云