一、授权参考:https://blog.risingstack.com/...1、基本认证(最简单,适用于没有第三方的请求接口)customers客户端发送授权,内容为BasicBase64编码(用户名:密码),用户名和密码没有加密缺点:每次请求都必须携带用户名和密码,不安全2.CookiesSession:用户登录成功,服务器返回一个sessionID,客户端将其保存在cookie中,每次请求都会带上这个sessionIDHTTPOnly:(setinconfig/session.php)如果为true,则JS代码将无法读取cookie信息,无法获取document。饼干。从而防止XSS攻击,增加cookies的安全性,但即便如此,也不要在cookies中存储重要信息3。SingleKey:双方同意的唯一标记4。Tokens4.1JWT:JsonWebToken参考:https://www.jianshu.com/p/af8...;用户完成登录后,每个请求都会包含JWT,用于验证用户的身份和访问权限。组成:Headerheader包括Token类型和加密算法,base64加密的Payload负载存储Valid信息,base64加密的Signature签名包括Header,Payload,Secretkey(Secret保存在服务器上,服务器会生成token并根据在此密钥上,因此需要对其进行保护)。三部分由连接。生成一个完整的tokencookie+session通常是保存在内存中,从单服务到多服务面临的session共享问题,随着用户数量的增加,开销会增加。JWT只需要服务端生成token,客户端保存token即可。每个请求都使用Bearer在headerauthorization中携带token,服务器进行鉴权解析。因为JWT不使用cookies,所以支持跨域,因为json的通用性,所以支持跨语言4.2Self-Tokens根据业务,自己写生成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-TimePasswords(OTP)一次性密码Time-basedOne-timePasswordAlgorithmBasedontimeHMAC-basedOne-timePasswordAlgorithmBasedonthecounter感觉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...2.安全1.请求不信任任何输入数据。检查数据格式:len、range、format、type。拒绝无效和非法内容。使用通用检查类库。不要自己造轮子,拒绝太大的请求数据记录失败次数,黑名单输入值与提交时的session一致。如果不清除缓存,验证码将一直有效,不安全。保存时可以使用session::flash,访问一次就删除,解决清除缓存RateLimit-RemainingRetry-AfterX-RateLimit-Reset5的问题。安全连接(禁止跳过验证)=》HTTPSHTTP:最常见的网络协议,以明文形式发送内容,不适合传输一些敏感信息HTTPS:HTTP的安全版本,在HTTP中是基于SSL协议的。SSL依赖在证书上验证服务器的身份并对客户端和服务器之间的通信进行加密功能1:建立数据传输的安全通道功能2:确认网站的真实性缺点:成本高,速度慢,流量成本区别大:HTTPS需要申请证书,HTTPS数据加密,安全性高,HTTP端口为80,HTTPS为4436。数据RSA加密支付场景https://docs.open.alipay.com/...7.XSS参考资料:http://lavelacademy.org/pos...注入恶意JS代码,解决办法是使用htmlentities()对数据进行转义,Laravel的blade模板引擎已经帮我们处理好了{!!$data!!}将本地输出HTML,适用于图片和链接{{$data}}会对数据进行转义,避免XSS攻击。如果需要更强大的过滤HTML功能,可以使用HTMLPurifier库8.SQL注入注入恶意SQL语句,不仅可以get注入,post注入,还可以cookie注入或者使用PHP注释破解关键字重组,解决方法如下:PseudoStatic:重写URL,隐藏传递的参数关键字过滤:防止恶意参数的输入,过滤掉敏感的关键字和符号,使用正则过滤更好的SQL语言预处理:类似于编译好的SQL语句executedTemplate,它的优点是多次执行语句,只做一次查询,减少时间,占用资源少,效率高。很多现代的PHP框架都采用了MVC模型,对数据库的操作都依附于Model。底层已经做好了防止SQL注入的工作。9、CORS跨域资源共享我在《HTTP API 设计入坑指南 一》写跨域的时候提到过。10、CSRF参考:https://www.ibm.com/developer...https://zh.wikipedia。org/wiki...跨站域请求伪造,通过请求窃取用户cookie信息,解决策略如下:验证HTTPReferer字段:Header中的referer字段用于记录请求的源地址,并且黑客通过他自己的网站请求。地址无效,拒绝请求。但是部分浏览器可以篡改referer值token验证:由于黑客窃取了cookie信息,所以添加一个随机token作为参数,在服务器验证tokenHTTPHeader中自定义属性验证:与token相同,但是没有放在参数里,但是记得在Header里跟着我
