Web安全策略整理

一、加密策略方式选择:

  1. 不可逆加密:无法逆向解密的加密方式,目前主流方案是MD5和SHA1加密算法策略;但是存在暴力解密的风险;
  2. 对称加密:对称加密是双方统一加密规则进行明文加密/解密,AES加密策略就属于对称加密;当不法分子获取到加密规则时,就可以逆向解密的风险极高;(前端依赖包:crypto-js)
  3. 非对称加密:非对称采用双密钥机制进行加密/解密,由服务器端统一生成公钥/私钥,然后前端通过公钥进行明文加密,服务器端用私钥对密文进行逆向解密。同时每次加密明文生成的密文是不一样的。所以安全性极高;RSA加密策略就属于非对称加密;(前端依赖包:jsencrypt)
  4. 对称加密+非对称加密:采用对称加密和非对称加密的方式进行组合加密,明文采用对称加密进行加密,然后将加密后的明文通过非对称加密再进行加密;如下图所示:
    Web安全策略整理_第1张图片

二、跨站请求伪造攻击(CSRF攻击)

概述:攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品);目前web系统做的防御只是验证了用户的正确性,并没有进一步验证请求是否是来自用户本身;

攻击场景:某系统用户登录之后后台返回cookie进行用户登录验证,然后该用户不小心打开钓鱼网站,获取到了cookie信息,不法分子就可以通过cookie进行攻击

本质上解决的方案就是多加几层验证,通过加强验证减少CSRF攻击;加强验证的几种方式:

  1. 验证Referer白名单:Referer属性存放在请求头Header里面,用来记录请求来源;浏览器每次向服务器请求资源/数据,默认带上referer属性;目前大多数浏览器无法通过JS直接更改Refer属性,网上言:IE6低版本貌似可以;
  2. 使用随机token:当用户访问需要提交表单数据的页面时,比如登录提交;登录之前后台生成随机token保存在服务器并返回客户端,提交表单数据时附上后台返回的token进行验证,必须采用随机token,这样token就具有不可预测性;
  3. 在header添加自定义属性:通过前后端两方定义好规则进行header自定义属性判断,可以采用加密算法进行加密;该方式类似于token效验。

三、SRI资源完整性策略

验证子资源的完整性,防止发生CDN资源被劫持篡改,导致安全攻击;而Web系统开发中为了优化项目加载资源的时间,一般会将Web系统的子资源(JS、CSS、图片等)部署在CDN服务器进行访问;当黑客劫持到了该资源并进行篡改,会对我们系统产生不可预测的安全危机;

为什么CDN能优化系统加载时间?主要是服务商CDN 服务提供商通过分布在各地的节点,让用户从最近的节点加载内容,而从大幅提升系统加载速度,在相同的网络速度下,路减少了,自然就快了。

  1. 设置crossOrigin='anonymous’属性:在img/script/link等静态资源加载时,不会发在跨域问题。当我们设置crossOrigin='anonymous’属性就强制对这些文件进行跨域访问;
  2. 设置integrity属性:保证子资源完整性的SRI的核心属性,通过curl命令生成子资源签名摘要,浏览器拿到该资源时,会利用integrity属性说明的算法进行签名比较,如果合法,则加载资源使用。不合法就不会执行该资源;integrity属性的签名算法支持 sha256、sha384和sha512;

生成子资源签名摘要curl命令:

curl https://cdn.bootcdn.net/ajax/libs/jquery/3.5.0/jquery.js | openssl dgst -sha512 -binary | openssl enc -base64 -A

Web安全策略整理_第2张图片

script标签引用SRI实例:


<html>
<head>
<title>title>
head>

<body>
<h1>实现SRI子资源完整性h1>
body>
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.0/jquery.js" integrity="sha256-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==" crossorigin="anonymous">script>
html>

你可能感兴趣的:(服务器,javascript)