不多说了,全称Message Digest Algorithm 5,信息摘要算法
全称secure hash algorithm 安全散列算法
hash message authentication code 散列消息鉴别码,根据hash算法的认证协议。
HMAC的认证原理是,使用一个密钥生成一 个固定大小的小数据块,即MAC,并将其加入消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。经常用于对API参数进行请求验证:分配给授权调用方一个 密钥,授权调用方使用密钥和接口的相关信息散列计算出请求签名,然后将签名连同数据-起发给服务 方;服务方根据调用方标识,使用其密钥和同样的散列算法计算出签名和传来的签名做比较,以验证请求的合法性。
对称加密又称被为单密钥加密,是采用单钥密码系统的加密方法,同一个密钥既也可以解密。
DES,全称Data Encryption Standard,即数据加密标准,其使用64位的密钥把64位的明文输人块经过16轮替换和移位操作后变为64位的密文输出块。此算法的人口参数有3个。
PBE,全称Password-Based Encryption, 基于密码加密,是一种简便的加密方式。密钥由用户自己掌管,不借助任何物理媒体,其采用salt杂凑多重加密等方法保证数据的安全性。
非对称加密需要两个密钥,一个是公开的,称为公钥;另一个是私有的, 称为私钥。公润用来加密数据,只有私钥才能解密;私钥般用来签名, 公钥用来验证签名。非对称加密算法安全性要比对称加密算法高很多,但是其运算消耗资源多、效率慢,因此很多情况下都是结合对称加密一起使用的。
RSA,是以算法发明者的名字命名的,其安全性依赖于大数分解的困难程度,于认证和数据加解密,也可以用于密钥交换。 其一般流程如下。
1)A构建一对密钥, 将公钢公布给B.将私街保留。
2)A使用私钥加密数据并签名,发送给B.
3)B使用A的公钥、签名来验证收到的密文是否有效,有效则使用A的公钥对数据解密。
4)B使用A的公钥加密数据,发送给A,A用自己的私钥解密
DH,全称Dife Hellman算法,是一一个密 钥交换协议。其主要用来做密钥交换,一般不用来做认证和加解密数据。其般的使用流程如下。
1) A构建一对密钥,将公钥公布给B,将私钥保留。
2) B通过A公钥构建密钥对儿,将公钥公布给A,将私钥保留。
3) AB双方互通本地密钥算法。
4) AB双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以
可见相比RSA. DH要多发送一个DH公钥,并且其最终对数据的加解密依赖于本地付称加密算法。
很多时候后端应用都会直接提供HTTP接口以供浏览器、客户端、第三方来调用。但由于HTTP协议是明文传输的,且没有任何的身份认证机制和数据完整性保证,因此数据很容易被中间人劫持、监听、篡改等。虽然能够通过对传输的业务数据加密避免这点,但HTTPS才是最根本的解决方案。这也是现在好多互联网公司都在进行全站HTTPS迁移的原因,也是应用商店要求应用调用的API接口都换成HTTPS的动机所在。
可以看到,HTTPS相比HTTP多了一个安全加密层,不仅对数据进行了加密,还对数据完整性提供了保护,并且也提供了身份验证的功能。
非对称加密算法在很多情况下会与对称加密算法一起使用,而HTTP就是一个典型的应用场景。简单说就是:其中一方先生成一个对称加密密钥,然后通过对称加密的方式夹发送这个密钥,这样双方之后的通信就可以用对称加密这种高效率的法进行加解密了。
SSL和TLS都是用于保障端到端之间连接的安全性的,位于应用层和传输层之间。SSL现在已经改名为TSL,主流版本为TLS1.2:
CA是HTTPS依赖的关键组件,即Certifcate Authority,证书中心。客户端从CA获取服务器公钥,并能够保证此公钥不会被中间人篡改。
CA对公钥完整性保证依赖的一个机制就是颁发证书,证书包括以下内容。
使用CA的流程如下。
1)首先将公钥与个人信息用hash算法生成一个消息摘要,然后CA再用它的私钥对消息摘要加密,最终形成数字签名。
2)客户端接收到证书时,用同样的hash算法再次生成一个消息摘要,然后用CA的公钥对证书进行解密,之后再对比两个消息摘要即可保证数据未被篡改。
此外,为了保证CA的权咸性以及其自身公钥的权威性,CA机构有一个树形结构,父节点是信用高的CA,会对子节点的CA做信用背书。
1)客户端向服务器端发送请求,将客户端的功能和首选项传送给服务器端,包括客户端支持的SSL版本、加密组件列表等。
2)服务器端发送选择的连接参数(从客户端加密组件中筛选出的加密组件内容和压缩方法)以及证书(包含公钥等信息)给客户端。
3)客户端读取证书中的所有人、有效期等信息并进行校验,然后通过预置的CA验证证书合法性,有问题则提示。
4) 客户端生成用于数据加密的对称密钥,然后用服务器的公钥进行加密并发送给服务器端。
5)服务器端使用自己的私钥解密数据,获得用于数据加密的对称密钥。
6) 安全的通道建立完毕,后续基于对称加密算法传输数据。
虽然HTTPS安全性比HTTP要高很多,但是由于建立通信通道要先交互很多次,应用的性能受到了不小的影响,因此优化HTTPS的性能非常关键。
1)算法选择。
HTTPS的通信过程中有不少算法参与,算法的性能直接决定了HTTPS的性能。
2)TLS缓冲区。
TLS缓冲区大小即一个TLS Record的大小,在Nginx中默认值是16KB。如果HTTP的数据是320KB,那么就会被拆分为20个TLS Record,然后每个TLS Record会被TCP层拆分为多个TCP包发送给客户端。
如果此值过小,那么TLS Record Head的负载就会增加,会降低连接的吞吐量;而如果此值过大,拆分出的TCP包就比较大,传输过程中容易出现丢包,整个TLS Record到达客户端的时间就会加长。
由于在TCP慢启动的过程中TCP连接的拥塞窗口CWND较小,TCP连接吞吐量也小,因此可以把TLS Record Size设置得小一点;而在TCP连接结束慢启动之后,吞吐量上来了,TLS Record Size 可以设置得大一些。
3) TLS False Start。
主要指的是客户端这边的TLS False Start。开启此选项,那么客户端在发送ChangeCipher Spec、Finished 之后,可以立即发送应用数据,无须等待服务器端的Change Cipherpec、Finished。这样,应用数据的发送实际上并未等到握手全部完成,从而节省出一个
RTT时间,可以提高一定的性能。但开启此选项,需要满足以下条件。
Web安全问题,从大的方面可以分为:
常见的客户端安全问题有:
跨站点脚本攻击,全称Cross Site Script(XSS),顾名思义是跨越两个站点的攻击方式。
一般指的是攻击方通过“HTML”注人的方式篡改了网页,插入了恶意的脚本,从而在用户浏览网页或者移动客户端使用WebView加载时,默默地做了一些控制操作。
XSS可以说是客户端安全的首要问题,稍有不注意就会暴露出相关接口被人利用。
一个XSS攻击的例子如下。
<img src="1" onerror="alert('attack')"/>
如果脚本不是一个alert,而是换成跳转到一个具有删除操作的URL,或者脚本获取用户的Cookie,然后发送到远程服务器上,那么危害就会非常大。
防范这种攻击的常用方式有以下几种。
跨站点请求伪造,全称Cross Site Request Forgery,简称CSRF。这也是一种常见的攻击方式。
这种攻击方式,主要通过诱导用户单击某些链接,从而隐含地发起对其他站点的请求,进而进行数据操作。
一个攻击示例如下。
对于CSRF攻击的常用解决方案有以下几种。
SQL注人攻击是一个很常见的攻击方式,原理是通过发送特殊的参数,拼接服务器端的SQL字符串,从而达到改变SQL功能的目的。
一个攻击例子如下。
需要说明的是,如果服务器的请求错误信息没有做进一步封装,直接把原始的数据库错误返回,那么有经验的攻击者通过返回结果多次尝试就会有机会找出SQL注人的机会。
防范这种攻击的方案有以下几种。
基于约束条件的SQL攻击的原理如下。
如此,我们设计一个用户表(暂且忽略设计的合理性),对其中的用户名和密码字段都设置25个字符限制:
CREATE TABLE test user (user name varchar(25),
pwd varchar(25)
);
有一个user_name为user_test的用户注册,于是向数据库添加一条记录:
insert into test_user values("user test","111111");
接着,一个user_name为“user_test 1”(中间留有25个空格)的用户再来注册。一般的业务逻辑如下。
这样,由于user_name限制为25个字符,那么新用户的user_name成为了“user test”(后面是16个空格字符)。现在数据库记录如下(第二个记录后面是16个空格):
user_name pwd
user_test 111111
user_test 123456
这样,当使用user_name='user_test'和pwd='123456'登录时,能匹配到年二条记录,登录是成功的。但是用户信息使用的是第一条记录,于是攻击者就获取到了巢一个用户的操作权限。
防范这种攻击的措施如下。
DDOS,全称Distributed Denial of Service,分布式拒绝服务攻击。攻击者利用很多台村器同时向某个服务发送大量请求,人为构造并发压力,从而使得服务被冲垮,无法为正常用户提供服务。常见的DDOS攻击包括:
其中SYN food是最经典的DDOS攻击。其利用了TCP连接三次握手时需要先发送SYN的机制,通过发送大量SYN包使得服务器端建立大量半连接,这就消耗了非常多的CPU资源和内存。针对这种攻击,很多解决方案是在TCP层就使用相关算法识别异常流量直接拒绝建立连接。但是,如果攻击者控制很多机器对一个资源消耗比较大的服务接口发起正常访问请求,那么这个方式就无效了。
由于难以区分是否是正常用户的请求,因此DDOS是非常难以防范的,但仍有一些措施能够尽量地减少DDOS带来的影响,介绍如下。
String ip = Networkoti1.getclientIP (reqguest, false); // 获取 客户 端IP地址
String key="ddos."+ip;
long count = suishenRedisremplate.incr(key);//incr 不会影响expire
if (count > 10000){
throw new AccessException("access too frequently with ip:"+ StringUtils.defaultString(ip));
} else {
if (count == 1)(
suishenRedisTemplate.expire(key,10);
return true;
}
上述代码即可将同一IP的请求限制在10秒10000次。
此逻辑越靠近访问链路的前面效果越好,比如直接在Nginx中拦截,其效果就要比在业务应用中做得好。
Sesion fxation 攻击,顾名思义就是会话固定攻击。在我们平时的Web开发中都是基于Sesion做用户会话管理的。在浏览器中,Session的ID一般是存储在Cookie中的,甚至直接附带在query参数中。如果Session 在未登录变为登录的情况下不发生改变的话,Sessionfixation 攻击就形成了。
一个攻击示例如下。
这种攻击的关键点就在于Tomcat使用JSESSIONID作为Session ID。因此,防范这种攻击的核心之一就在于,不能使用客户端传来的Session ID。此外还有以下方法。
文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99
文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效
文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是
文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件
文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件
文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码
文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware
文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停
文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待
文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析
文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code
文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象