网络安全--腾讯

一、HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

1、他的数据是加密的。2、验证身份,客户端和服务端都会向CA机构申请证书,在SSL握手阶段会验证双方的身份,防止第三方的冒充;3、保证数据的完整性,每次数据都要加上MAC摘要并签名,接受和发送数据,都要保证摘要一致,防止数据被篡改。

结果分析:HTTP协议传输数据以明文形式显示
针对无状态的一些解决策略:
场景:逛电商商场用户需要使用的时间比较长,需要对用户一段时间的HTTP通信状态进行保存,比如执行一次登陆操作,在30分钟内所有的请求都不需要再次登陆。
通过Cookie/Session技术
HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
HTTPS特点:
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

HTTPS有如下特点:

  1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  2. 验证身份:通过证书认证客户端访问的是自己的服务器
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

混合加密:**结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。


**数字摘要:**通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。


**数字签名技术:**数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
å容å å¯åæ°æ®å®æ´æ§ä¿æ¤

二、常见的密码学算法

1、哈希算法

比特币系统中使用的哈希函数分别用于完成工作量证明计算合生成地址。简言之,哈希算法是将任意长度的字符串映射为较短的固定长度的字符串。因为这个运算的确定性,高效性使得去中心化的计算能够实现。又因为对输入的敏感性,和该映射逆函数难以寻找(抗原像攻击),对区块链系统安全性有很大帮助。

哈希算法是一种常见的单向加密算法,它将一串数据加密生成一串固定长度的二进制字符串,这段二进制字符串就是哈希值,但不能由哈希值还原为原来的输入数据。密码学中的哈希函数有3个重要的性质,即抗碰撞性原像不可逆难题友好性

碰撞性:是指两个不同的数据在同一哈希函数作用下,生成相同的哈希值。首先,两个不同的输入产生相同哈希值答案是肯定的,但在于它需要像十亿年后的所有计算机一样来寻找碰撞,以目前计算机的运算能力可以忽略不计。在区块链中,哈希函数的抗碰撞性可以用来做区块和交易的完整性验证。

原像不可逆:是指根据输出的二进制字符串很难计算出输入的数据。因为输出的哈希值长度远远小于输入的长度,所以在运算过程中会丢弃大量的信息,由于缺失了很多信息,所以根本无法逆向出任何一个输入值。

难题友好性:是指没有便捷的方法去产生一个满足特殊要求的哈希值。是什么意思呢,通俗的讲,就是没有捷径,需要一步一步算出来。假如要求得到的哈希结果以若干个0开头,那么计算找到前3位均为0的哈希值和找到前6位均为0的哈希值,其所需的哈希计算次数是呈一定数量关系。

常用的哈希算法有MD5、SHA256和RIPEMD。在区块链中很多地方用了哈希算法,比如对区块计算哈希值、区块和交易的完整性验证等等。

2、对称加密算法

对称加密技术,是采用同一个混淆因子(也叫密码),然后使用混淆算法对输入进行混淆,得到加密后的数据。之后,采用相同的混淆因子(密码)进行逆运算,可以得到原始的输入值。它的特点是:使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,要求解密方事先必须知道加密密钥.

如果有人在传输过程中截取了密文和密钥,就一样能解密出明文,这就导致了安全性问题。目前区块链领域最常用的对称加密算法是AES、PBKDF2和SCRYPT。

3、非对称加密技术

非对称加密算法需要两个密钥:公钥(publickey)私钥(privatekey)。公钥与私钥是一对,私钥可以推导出公钥而公钥不可以推导出私钥,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。简单的说是“公钥加密,私钥解密;私钥加密,公钥解密”。

在区块链中,数字签名就是基于上述非对称加密技术,不同点在于数字签名使用私钥生成一个签名,接收方使用公钥进行校验。比如上面用私钥解密得到明文后,用私钥进行签名进行回复,收到回复后用公钥解密得到的内容与数据相同即可证明签名正确。

因为公钥和私钥是成对的,唯一对应的,私钥只有对方拥有,所以对方也不能对签名进行抵赖。

在区块链技术中常见的签名算法是椭圆曲线加密技术。其算法用对椭圆曲线上的点进行加法或乘法运算来表达。区块链中私钥是一个随机数,通过椭圆曲线签名算法生成公钥。但反向从公钥计算出私钥几乎是不可能的。椭圆曲线签名算法还具有安全性高和存储空间占用小的特点。

4、BASE58算法

Base58是比特币使用的编码方式,主要用于产生比特币的钱包地址,这种编码格式不仅实现了数据压缩,保持了易读性,还具有错误诊断功能。

 5. 零知识证明

零知识证明,它主要是指证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。

零知识证明能够成立需要具备三个要素,即完整性、可靠性和零知识。举个例子来说就是,假设有一个环形走廊,出口和入口相邻但不互通(在目测距离之内),在这个环形走廊中间的某处有一道锁起来的门,只有拥有钥匙的人才可以通过;这时A要向B证明自己拥有打开这道门的钥匙,用零知识量证明来解决就是,B看着A走进入口并在出口等待,如果A从入口进入通过走廊并从出口走出,则可以证明其拥有打开中间那扇门的钥匙,而在这个过程中,他完全不用向B提供钥匙的具体信息。所以零知识证明实际上是一种概率证明而非确定性证明。

三、常见的网络攻击和防御

1、中间人攻击

产生中间人攻击的本质原因是协商过程中的数据没有经过端点认证,通信两端不知道收到的协商数据是来自对端还是来自中间人。

  • 因此单纯的“密钥协商”是不够的,还需要“带认证的密钥协商”
  • 防御方式
  • CA证书
    • 基于签名算法的非对称认证
  • HMAC
    • 基于消息认证码(Message Authentication Code)的对称认证
    • 消息认证码的认证方式需要预先共享一个私密的Key(PSK)

2、重放攻击

  • 攻击者不需要理解请求本身的意思,只需要截获并重新发送请求即可
    • 如果转账业务没有做防重放处理,就会重现重复转账问题
  • 防御方式
    • 每次连接生成不同的秘钥来进行加密
    • 对于不加密的请求,使用 时间戳+不重数

3、CSRF跨站请求伪造

å¨è¿éæå¥å¾çæè¿°

  • CSRF攻击利用Cookie或Session盗取了用户身份
  • 和XSS区别在于恶意请求全部发生在用户的浏览器上
    • 这样不需要拿到cookie,绕开了HTTPOnly的限制

 CSRF的主要防御思路是识别请求者身份
防御方式
使用 HTTP 的 Referer 头
因为 Referer 头可以携带请求的来源页面地址,这样可以根据 Referer 头鉴别出伪造的请求
很多网站使用这个功能实现图片防盗链
如果访问图片的请求不是来自自己网站就拒绝
使用表单 token,服务端给每个表单都生成的一个随机数参数
Token和Cookie 所不同的是,前者是对每个页面或每个表单就会生成一个新的值,而后者则是只有会话重新生成的时候才会生成
当用户正常操作的时候,这个 token 会被带上,从而证明用户操作的合法性,而如果是 CSRF 的情形,这个请求来自于一个非预期的位置,那么就不可能带有这个正确的 token
验证码
用户体检不好,一般用于关键页面
一旦存在xss,csrf的防御措施都可能失效

4、XSS(跨站脚本攻击)

[å¤é¾å¾ç转å­å¤±è´¥,æºç«å¯è½æé²çé¾æºå¶,建议å°å¾çä¿å­ä¸æ¥ç´æ¥ä¸ä¼ (img-xHqzfIXr-1587467432534)(C:\Users\35135\Desktop\markdown\1587355817945.png)]

全球大约70%的web应用攻击来自XSS和SQL注入攻击
攻击者在服务器返回的普通页面中嵌入特殊的脚本代码,那么在普通用户浏览这个网页的时候,这个特殊的脚本代码就得到了执行,于是用户的 Cookie 通过请求的方式发送给了这个攻击者指定的地址,这样攻击者就劫持了用户的会话,利用 Cookie 中标识身份的字符串,就可以伪装成实际的用户在这个网页操作了
 恶意脚本的上传方式,往往是利用网站没有对用户的输入(例如提交的表单)进行过滤或转义造成的
防御方式
做好字符转义和过滤
让用户上传的文本在展示的时候永远只是文本,而不能变成 HTML 和脚本
控制好 Cookie 的作用范围
比如服务器在返回 Set-Cookie 头的时候,设置 HttpOnly 这个标识
这样只能通过http访问,javascript无法访问,恶意上传的js脚本就无法获得 Cookie 了
5、SQL注入

 å¨è¿éæå¥å¾çæè¿°

SQL 注入指的是攻击者利用网站漏洞,通过构造特殊的嵌入了 SQL 命令的网站请求以欺骗服务器,并执行该恶意 SQL 命令
SQL注入需要攻击者对数据库结构有所了解
获取方式:
网站使用开源软件搭建,那么网站数据库结构就是公开的
网站开启错误回显,那么内部错误会显示在浏览器上,可以通过故意构造非法参数获取异常信息
防御方式
对输入参数进行校验和过滤
SQL语句的执行尽可能采用参数化查询接口,而不是字符串拼接
HTTP劫持
由于HTTP是明文传输,所以可以被运营商或者网络服务提供商任意篡改
常用方式是把原网页嵌入一个iframe中,并让这个iframe占据这个浏览器,然后就可以在iframe外添加浮动广告了
把网站换位HTTPS可以避免这种劫持
DNS劫持
用户的浏览器在通过 DNS 查询目标域名对应的 IP 地址的时候,会被攻击者引导到一个恶意网站的地址。这个假的网站也可以有相似的页面布局,也可能有“正规”方式申请的 HTTPS 证书
HTTPS加密本身并不能防范DNS劫持
可以通过DNS over HTTPS 的安全域名解析方案防御
DDoS攻击(分布式拒绝服务攻击)
攻击者使用若干被“攻陷”的电脑(比如被病毒占领和控制的“肉鸡”),向网络应用和服务同一时间发起请求,通过一瞬间的请求洪峰,将服务冲垮
错误回显
一些服务端直接把未处理的异常堆栈信息直接输出到客户端
黑客通过故意制造非法请求,使系统出错获取异常信息,来寻找漏洞
防御方式: 出错时跳转到专门的错误页面即可
路径遍历
在请求的URL中使用相对路径,遍历系统未开放的目录和文件
防御方式:
把JS,CSS等资源部署在独立服务器、使用独立域名
其他文件不适用静态URL访问
动态参数不包含文件路径
 

おすすめ

転載: blog.csdn.net/Lovezyn971221/article/details/122224390