token

API接口的安全性

血红的双手。 提交于 2019-12-15 17:47:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: Token授权机制:用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。Token是客户端访问服务端的凭证。 时间戳超时机制:用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效。时间戳超时机制是防御DOS攻击的有效手段。 签名机制:将 Token 和 时间戳 加上其他请求参数再用MD5或SHA-1算法(可根据情况加点盐)加密,加密后的数据就是本次请求的签名sign,服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,直接返回错误标识。签名机制保证了数据不会被篡改。 拒绝重复调用(非必须):客户端第一次访问时,将签名sign存放到缓存服务器中,超时时间设定为跟时间戳的超时时间一致,二者时间一致可以保证无论在timestamp限定时间内还是外 URL都只能访问一次

纯手工搭建K8s(单节点)

*爱你&永不变心* 提交于 2019-12-15 17:11:42
准备说明:   因为为纯手动搭建,所以针对安装时需要的一些安装包需提前下载好   cfssl_linux-amd64、   cfssljson_linux-amd64、   cfssl-certinfo_linux-amd64、   etcd-v3.3.10-linux-amd64.tar.gz、   flannel-v0.11.0-linux-amd64.tar.gz、   kubernetes-server-linux-amd64.tar.gz(网络环境原因可以上github上下载或者找台vps下载好然后再从vps上拉下来)   至于各组件的版本可自行决定,如此纯手动的好处是当一步出现问题的时候可查询是否有组件替代方案(国产芯片上很有用。。。) 安装步骤 #### Master节点安装 - step1: 设置机器免密登录 ```shell ssh-keygen ### 一直回车到最后 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ###公钥加入到authorized_keys中 systemctl restart sshd ### 重启sshd服务 ssh localhost ### 测试是否免密登录自己 ``` - step2: 关闭防火墙 ```shell systemctl stop firewalld &&

JSON Web Token

戏子无情 提交于 2019-12-15 16:13:23
作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。 3、服务器向用户返回一个 session_id,写入用户的 Cookie。 4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。 5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。 这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。 举例来说,A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现? 一种解决方案是 session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外

token

∥☆過路亽.° 提交于 2019-12-15 09:40:01
token 1.什么是token? token是一段经过后端处理【后端加密算法】的特殊字符,后端在前端登录时,会给前端返回这个字符,前端拿到这个字符之后,要将它存入cookie. 2.token的作用是什么? 项目自动登录 身份验证 >>前端发送的每一个数据请求,要求携带一个token数据 权限验证 >>普通用户、会员用户、管理员 原理:当用户注册并登录后,后端会给他返回一个token字符 3.使用方法 在项目根目录创建一个rsa文件夹,用于存放公钥和私钥(私钥加密,公钥解密,成对出现 来源: CSDN 作者: 金州队长 链接: https://blog.csdn.net/weixin_45789958/article/details/103484465

安全测试基础

这一生的挚爱 提交于 2019-12-15 05:30:32
转载网上一篇关于安全测试的文章 转载文章标题名为“ 安全测试基础(Ⅰ) 安全测试概述 ” 转载地址: https://www.cnblogs.com/rd-ddddd/p/7718206.html#4367070 一般来说,版本功能测试完成,对应的用例也实现了自动化,性能、兼容、稳定性测试也完成了以后,我们就需要考虑到系统的安全问题,特别是涉及到交易、支付、用户账户信息的模块,安全漏洞会带来极高的风险。 一.安全测试原则与常见的安全威胁: 1.安全需求: ※认证:对认证的用户的请求返回 ※访问控制:对未认证的用户的权限控制和数据保护 ※完整性:用户必须准确的收到服务器发送的信息 ※机密性:信息必须准确的传递给预期的用户 ※可靠性:失败的频率是多少?网络从失败中恢复需要多长时间?采取什么措施来应对灾难性的失败?(个人理解这个地方应该更偏向于容错容灾测试的范畴) ※不可抵赖:用户应该能证明接收到的数据来自特定的服务器 2.常见的安全测试内容 权限控制 SQL注入 URL安全测试 XSS(跨站脚本攻击) CSRF(跨站请求伪造) URL跳转漏洞 其他安全方面的考量 接下来,我们以一个C#实现的下常见的MVC架构网站为例,来分析具体的各个安全测试角度。 二.权限控制 权限控制相对来说比较简单,功能测试的过程中也接触过不少,主要就是考虑以下方面: 1.用户权限:我们假设存在两个用户A,B

深入理解token

做~自己de王妃 提交于 2019-12-14 22:21:05
深入理解token 链接:https://my.oschina.net/jamesfancy/blog/1613994 摘要: Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位 不久前,我在在前后端分离实践中提到了基于 Token 的认证,现在我们稍稍深入一些。 通常情况下,我们在讨论某个技术的时候,都是从问题开始。那么第一个问题: 为什么要用 Token? 而要回答这个问题很简单——因为它能解决问题! 可以解决哪些问题呢? Token 完全由应用管理,所以它可以避开同源策略 Token 可以避免 CSRF 攻击(http://dwz.cn/7joLzx) Token 可以是无状态的,可以在多个服务间共享 Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。如果这个 Token 在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。 于是,又一个问题产生了:需要为 Token 设置有效期吗? 需要设置有效期吗? 对于这个问题,我们不妨先看两个例子。一个例子是登录密码,一般要求定期改变密码,以防止泄漏

JWT(JSON WEB Token)

天涯浪子 提交于 2019-12-14 21:19:33
转载了: https://www.jianshu.com/p/792f71bb52dd https://blog.csdn.net/weixin_37569048/article/details/80118059 在Web应用中,使用JWT替代session并不是个好主意 适合JWT的使用场景 使用JWT管理session还有如下缺点: 缺点一: 无法满足注销场景 传统的 session+cookie 方案用户点击注销,服务端清空 session 即可,因为状态保存在服务端。但 jwt 的方案就比较难办了,因为 jwt 是无状态的,服务端通过计算来校验有效性。没有存储起来,所以即使客户端删除了 jwt,但是该 jwt 还是在有效期内,只不过处于一个游离状态。 缺点二: 无法满足修改密码场景 修改密码则略微有些不同,假设号被到了,修改密码(是用户密码,不是 jwt 的 secret)之后,盗号者在原 jwt 有效期之内依旧可以继续访问系统,所以仅仅清空 cookie 自然是不够的,这时,需要强制性的修改 secret。 缺点二: 无法满足token续签场景 我们知道微信只要你每天使用是不需要重新登录的,因为有token续签,因为传统的 cookie 续签方案一般都是框架自带的,session 有效期 30 分钟,30 分钟内如果有访问,session 有效期被刷新至 30 分钟。但是

ASP.NET Core框架深度学习(一) Hello World

倖福魔咒の 提交于 2019-12-14 14:26:18
  对于学习Core的框架,对我帮助最大的一篇文章是Artech的《 200行代码,7个对象——让你了解ASP.NET Core框架的本质 》,最近我又重新阅读了一遍该文。本系列文章就是结合我的阅读心得,一起来搭建一个迷你的Core框架。 本文相关代码在码云上,链接如下 https://gitee.com/qixinbo/MyKestrelServer/tree/master/CoreMini/CoreMini 还有部分是core的源码,链接如下 https://github.com/aspnet/AspNetCore/tree/master/src/Http 1、从Hello World谈起   当我们最开始学习一门技术的时候都喜欢从Hello World来时,貌似和我们本篇的主题不太搭。但事实却非如此,在我们看来如下这个Hello World是对ASP.NET Core框架本质最好的体现。 public class Program { public static void Main() => new WebHostBuilder() .UseKestrel() .Configure(app => app.Run(context => context.Response.WriteAsync("Hello World!"))) .Build() .Run(); }  

密码加密与微服务鉴权JWT详细使用

和自甴很熟 提交于 2019-12-14 12:31:31
[TOC] 1.1、了解微服务状态 微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性。 什么是无状态? 1.服务端不保存任何客户端请求者信息 2.客户端的每次请求必须自备描述信息,通过这些信息识别客户端身份 无状态,在微服务开放中,优势是? 1.客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务 2.服务端的是否集群对客户端透明 3.服务端可以任意的迁移和伸缩 4.减小服务端储存压力 1.2、无状态登录实现原理 服务器端生产唯一标识(注意:最终需要进行校验) 方案1:UUID,数据单一,不能包含种类过多的信息。 方案2:RAS加密,数据多样,需要使用算法,有一定的理解难度。【使用】 浏览器储存和自动携带数据 方案1:使用cookie,有很多局限性(大小,个数) 方案2:请求参数,get请求URL有长度限制,每一个路径都需要处理比较麻烦。 方案3:浏览器localStroage存储,请求头携带。【使用】 2.1、RAS工具 服务与服务之间共享数据,采用JWT先生成数据,在另一个服务中解析数据,为了保证数据安全性,使用RAS对数据进行加密。 使用RAS加密保证token数据在传输过程中不会被篡改 RAS:非对称加密算法 特点 同时生产一对密钥:公钥和私钥 公钥秘钥:用于加密 私钥秘钥:用于解密

基于swoole+Redis的消息实时推送通知

泄露秘密 提交于 2019-12-14 11:01:02
swoole+Redis将实时数据的推送 一 实现功能 设计师订单如果设计师未抢单,超时(5分钟)设计订单时时给设计师派送, 设计师公众号中收到派单信息 设计发布者收到派单成功信息 环境 centos6.10 redis-4.0.2 swoole-src-4.4.12 php-7.1.5 MYsyql5.7 在centos6默认是gcc-4.7,安装swoole的时候需要升级到gcc-4.8 二 实现流程 1.开启swoole server端监听 2.开启swoole client连接执行定时执行 3.使用swoole task 异步执行推送逻辑 开始监听 服务端窗口 # php71 pushServer.php client连接执行开始任务 客户端窗口 # php71 pushClient.php start 默认start开启5个client tcp链接,每个链接开启一个1s定时器 开启后服务端窗口的变化 [root@111111 swoole_server]# php71 pushServer.php Client-1: 连接成功 reactor-7 Client-1 接受数据: data=start Client-1: 连接结束 Client-2: 连接成功 reactor-0 Client-2 接受数据: data=start Client-3: 连接成功 Client