cookie、session、token

一、Session

    是另一种记录客户端状态的机制,cookie保存客户端,session存储在服务器上

    登录成功 => 服务器存储Session => 并在客户端的cookie中也存储一个 => 之后客户端请求,服务端取到cookie的Session的值,在与服务器保存的来进行比较是否存在(这个过程是session内部的机制,程序只需要判断就行)

二、cookie

    存储在客户端本地,js和服务器都可以存、取、删cookie的值,cookie组成(key、value、domain、域、失效时间)

三、token

    token的意思是令牌,用户身份验证,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串

    作为身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。如上所说,如果你需要实现有状态的会话,仍然可以增加session来在服务器端保存一些状态

http://blog.csdn.net/qq_33401924/article/details/52947514
http://blog.csdn.net/jikeehuang/article/details/51488020

验证码的流程

通过插件来生成图型 => 并将图片结果存到session中,并存到用户的cookie中 => 登录时来判断session中的值与用户请求参数的值是否相同

https://github.com/lemonce/svg-captcha/blob/master/README_CN.md

// 生成验证码
async captcha() {
    const svgCaptcha = require('svg-captcha');
    const { ctx } = this;
    const captcha = svgCaptcha.createMathExpr({
        size: 4,                 // 验证码长度
        ignoreChars: '0o1i',     // 验证码字符中排除 0o1i
        noise: 3,                 // 干扰线条的数量
        color: true,             // 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有
        background: 'rgba(0,0,0,0.3)', // 验证码图片背景颜色
    });
    ctx.session.captcha = captcha.text;
    ctx.type = 'image/svg+xml';        // 设置header的content-type
    ctx.body = captcha.data;
}

// 用户登录
async login() {
    const { ctx, app, service } = this;

    if (ctx.session.captcha && ctx.session.captcha !== ctx.request.body.captcha) {
    this.success({
        data: {},
        message: '验证码错误',
        statusType: app.statusType.otherError,
    });
    return;
    }

    if (
    app.validateParams({
        userName: { type: 'string', max: 100, min: 2 },
        pwd: { type: 'string', min: 1 },
    }, ctx)
    ) {

    const data = await service.auth.login(ctx.request.body);
    this.success(data);
    }
}

http和https

https://segmentfault.com/a/1190000003801450

登录流程

session或token

密码加盐 MD5(username + password + salt)

———————– 概念 ———————–

服务器、虚拟机

服务器: 只是一个硬件虚拟服务只是系统部分

虚拟机: 允许一台HTTP服务器搭建多个web建点,也就是一台服务器可以为多个用户服务,每个用户通过域名运行各自的网站,这就是利用了虚拟机(又称虚拟服务器)的功能

前后分离

前后端数据分离登录失效判断可以通过session服务端来判断 => 跳转会员管理每个页面 => 服务器端判断session是否失效 => 失效跳到登录

其它页面的登录信息可以前端可以通过cookie来获取

正向代理、反向代理 Proxy

一、正向代理: 比如翻墙,直接访问国外网站访问不了,需要可以一个服务器来进行访问。正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。

正向代理

二、反向代理: 代理理服务器来接受网络的连接请求,然后将请求转发给内部网络的服务器 (服务方的需求,为了解决一些负载等问题)

    作用: 保证内网的安全,负载均衡

反向代理
反向代理

http://www.cnblogs.com/Anker/p/6056540.html

CDN和反向代理

CDN: 部署在网络提供的机房,用户请求时可以从最近的网络提供商机房获取数据

负载的均衡

通过反向代理服务器来优化网站的负载

负载的均衡

集群、分布式

跳板机

跳板机是开发者登录到网站分配给应用服务器的唯一途径。开发者必须首先登录跳板机,再通过跳板机登录到应用服务器

k踏板机属于内控堡垒机范围,用于单点登录的主机,之前是为了运维人员远程登录进行管理,会在机房部署跳板机,踏板机就是一台服务器,维护人员在维护过程先要统一登录在这台服务器上在登录到目录服务器进行维护

中间件

缓存

网站缓存有两种:缓存在应用服务器上(本地缓存)和缓存在专门的分布式缓存服务器上(远端缓存)

RESTful架构

CORS跨域资源共享

1、通过设置服务器对header设置一个Access-Control-Allow-Origin: *, 开启跨域请求。在被请求的Response header中加入

    // 指定允许其他域名访问  
    header('Access-Control-Allow-Origin:*');
    // 响应类型  
    header('Access-Control-Allow-Methods:POST');
    // 响应头设置  
    header('Access-Control-Allow-Headers:x-requested-with,content-type');  

2、CORS优点: 跨域最常用的是JSONP但这种方式是通过Get的方式请求src完成的,很多跨域问题JSONP无法解决,比如: 

    1) post请求跨域

    2) "script error" 的脚本错误提示

    3) canvas中无法获取跨域图片的信息,如果使用CORS上面几个问题就可以解决

安全

一、XSS 攻击: 对 Web 页面注入脚本,使用 JavaScript 窃取用户信息,诱导用户操作

二、CSRF 攻击: 伪造用户请求向网站发起恶意请求

三、钓鱼攻击: 利用网站的跳转链接或者图片制造钓鱼陷阱

———————– 网络 ———————–

网关、隧道

网关: 转发其它服务器通信数据的服务器,接收从客户端发送来的

隧道: 将客户端和服务器之间进行中转,并保持双方通信连接的应用程序

TCP/IP

DNS

域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

http://www.alloyteam.com/2015/05/dns%EF%BC%8Cnode%E4%BB%A5%E5%8F%8A%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E7%9A%84%E4%B8%80%E4%BA%9B%E7%9F%A5%E8%AF%86%E5%92%8C%E5%BA%94%E7%94%A8/