摘要:而只需要服务端生成,客户端保存,每次请求在头部中使用携带,服务端认证解析就可。如果缓存不清理,验证码就会一直有效,不安全。
一、授权
参考文献:https://blog.risingstack.com/...
1. Basic authentication (最简单,适用于没有第三方的请求接口中)客户端发送authorization,内容为 Basic Base64编码(username:password),用户名和密码没有加密
缺点:每个请求都要带用户名和密码,不安全
2. CookiesSession:用户登录成功,服务端返回一个sessionID,客户端将其存在cookie中,每次请求都会带这个sessionID
HTTP Only:(config/session.php中设置)如果是true,JS代码将无法读取cookie信息,拿不到document.cookies。从而防止XSS攻击,增加了cookie的安全性,但即便如此,也不要将重要信息存入cookie
3. Single Key :双方约定唯一标示 4. Tokens参考文献:https://www.jianshu.com/p/af8...;
用户完成登录之后,每个请求都会包含JWT,用来验证用户身份和访问权限
构成:
Header头部包括Token类型和加密算法,并base64加密
Payload负载 存放有效信息,并base64加密
Signature签名 包括Header、Payload、Secret秘钥(Secret保存在服务端的,服务端会根据这个密钥进行生成token和验证,所以需要保护好)
三部分用.连接,生成完整的token
cookie+session通常是保存在内存中,而且服务从单服务到多服务会面临的session共享问题,随着用户量的增多,开销就会越大。而JWT只需要服务端生成token,客户端保存token,每次请求在头部authorization中使用Bearer携带token,服务端认证解析就可。
因为JWT不使用cookie,所以支持跨域
因为json的通用性,所以支持跨语言
根据业务,自己写生成token的逻辑,注意设定请求次数和过期时间
5. SignaturesAPI的使用者和提供者拥有同样的私钥,才能操作业务
算法如下:
对参数进行字典升序排列,防止顺序不同,生成的签名不同
排序后进行字符串连接
app-secret为后缀,进行加密,再转大写
案例:
http://wiki.open.qq.com/wiki/...
https://www.cnblogs.com/dcb36...
https://help.aliyun.com/docum...
https://cloud.tencent.com/doc...
https://docs.gdax.com/#creati...
http://dev.netease.im/docs/pr...
6. One-Time Passwords(OTP)一次性密码Time-based One-time Password Algorithm 基于时间
HMAC-based One-time Password Algorithm 基于计数器
感觉QQ安全中心就是这个原理,更多内容参考
https://www.jianshu.com/p/a7b...
http://www.cnblogs.com/voipma...
7. Oauth2Oauth2相当于第三方,在客户端和服务端之间多设置了一层,用户给客户端授权,客户端向第三方认证申请token,申请成功后使用token向服务端申请资源
参考文献:
http://www.ruanyifeng.com/blo...
https://oauth.net/2/
https://helpx.adobe.com/coldf...
二、安全 1. 请求不信任任何输入数据
校验数据格式:len,range,format,type
拒绝无效、非法内容
使用通用校验类库,不要自己造轮子
拒绝过大请求数据
记录失败次数,黑名单
验证码:清理session
登录时访问一个脚本文件,用来生成验证码,将值保存在Session中,提交时判断输入值与session是否一致。如果缓存不清理,验证码就会一直有效,不安全。
保存时可以用session::flash,访问一次之后就会被删除,解决清理缓存的问题
X-RateLimit-Limit
X-RateLimit-Remaining
Retry-After
X-RateLimit-Reset
HTTP:最普遍的一种网络协议,以明文方式发送内容,不适合传输一些敏感信息
HTTPS:HTTP的安全版,在HTTP基础上加了SSL协议,SSL依靠证书验证服务器身份,为客户端和服务端的通信加密
作用一:建立数据传输的安全通道
作用二:确认网站的真实性
缺点:费用高,速度慢,流量成本大
区别:
HTTPS需要申请证书、
HTTPS数据加密,安全性高、
HTTP端口是80,HTTPS是443
6. 数据RSA加密支付场景 https://docs.open.alipay.com/...
7. XSS参考文献:http://laravelacademy.org/pos...
注入恶意JS代码,解决方案是用 htmlentities()转义数据
laravel的blade模板引擎已经帮我们处理好了
{!!$data !!} 会原生输出HTML,适用于图片、链接 {{ $data }} 会对数据进行转义,从而避免XSS攻击。
如果需要更强大的过滤HTML功能,可以使用HTML Purifier库
8. SQL注入注入恶意SQL语句,不仅能get注入、post注入、还能cookie注入或利用PHP注释打碎关键词重组,解决方案如下:
伪静态:重写URL,隐藏传递的参数
关键词过滤:阻止恶意参数的输入,过滤掉敏感关键词和符号,利用正则过滤更好
SQL语言预处理:类似于一种编译过的要执行的SQL语句模板,它的优点是语句多次执行,只做一次查询,减少时间,少占用资源,效率高
现代PHP框架很多都采用MVC模式,数据库的操作都依附于Model,底层已经做好了预防SQL注入
9. CORS 跨域资源共享我写的《HTTP API 设计入坑指南 一》里写跨域的时候提到过
10. CSRF参考文献:
https://www.ibm.com/developer...
https://zh.wikipedia.org/wiki...
跨站域请求伪造,通过请求盗取用户cookie信息,解决策略如下:
验证HTTP Referer字段:Header里的referer字段用来记录请求的来源地址,黑客通过自己的网站去请求,地址不合法,拒绝请求。但是有些浏览器可以篡改referer值
token验证:既然黑客盗取了cookie信息,那就以参数形式加入随机的token,在服务器验证token
HTTP Header中自定义属性验证:和token一样,只是不放在参数中,而是Header头里
记得关注我呦
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/11380.html
摘要:而只需要服务端生成,客户端保存,每次请求在头部中使用携带,服务端认证解析就可。如果缓存不清理,验证码就会一直有效,不安全。 一、授权 参考文献:https://blog.risingstack.com/... 1. Basic authentication (最简单,适用于没有第三方的请求接口中) 客户端发送authorization,内容为 Basic Base64编码(usern...
一、请求方式 1. 请求方式有get/post/put/delete/options 2. get和post的区别: get通常用作获取数据,post通常用作提交数据 get参数有长度限制,受限于URL长度(http协议对url长度不限制,而是服务器和浏览器的配置参数限制),post无限制 get幂等,post不幂等(幂等:多次请求,结果一样) header里有个参数content-length...
摘要:简要说明长处在于使用模块规范,而不是使用的模块规范,以及使用的模块规范。简单使用关于命令行工具使用,请参照官方文档。相同模块重复依赖模块重复依赖很容易理解,模块实现时可能分割为多个子文件实现,每个子文件内部可能会引用同一个模块,如。 简介 browerify: http://browserify.org/index.html browserify可以看做浏览器端的又一个模块...
摘要:如果出错,需要查看一下本地节点是否正在运行,在浏览器输入后记完至此,本地的开发环境基本搭建完成,如果你想试试在本地环境编写部署调用智能合约,可以参考官方开发文档,当然,后续有时间,我也会把在智能合约开发过程中踩到的坑写写。 FIBOS是什么? FIBOS 是一个结合 FIBJS 以及 EOS 的 JavaScript 的运行平台,它使得 EOS 提供可编程性,并允许使用 JavaSc...
阅读 684·2023-04-25 22:50
阅读 1525·2021-10-08 10:05
阅读 982·2021-09-30 09:47
阅读 1912·2021-09-28 09:35
阅读 814·2021-09-26 09:55
阅读 3404·2021-09-10 10:51
阅读 3425·2021-09-02 15:15
阅读 3289·2021-08-05 09:57