AppScan扫描安全问题修复

AppScan扫描安全问题修复

      • 1、隐藏Nginx版本号
      • 2、缺少“Content-Security-Policy”头
      • 3、缺少“X-Content-Type-Options”头
      • 4、缺少“X-XSS-Protection”头
      • 5、已解密的登录请求
      • 6、会话标识未更新
      • 7、SRI (Subresource Integrity) 的检查

1、隐藏Nginx版本号

修改nginx.conf配置文件

http {    
	server_tokens off;   #默认是注释掉的
 }

2、缺少“Content-Security-Policy”头

修改nginx.conf配置文件

add_header Content-Security-Policy: default-src 'self';

解答: 该响应头主要用于规定页面可以加载那些资源(css/js/img 等)。看一个简单的配置
更多 Content-Security-Policy 的指令及规则及介绍可参考一下链接地址:
https://imququ.com/post/content-security-policy-reference.html

3、缺少“X-Content-Type-Options”头

修改nginx.conf配置文件

add_header X-Content-Type-Options nosniff;

解答:该响应头用于是否允许浏览器加载 frame、 iframe、 object 等属性。可以使用该功能来避免 点击劫持
该指令用三个可用的配置

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-Frame-Options: ALLOW-FROM https://example.com/

当设置为 DENY 时,站点禁止任何页面被嵌入。
当设置为 SAMEORIGIN 时,只允许加载同源的 fram/iframe/object。
当设置为 ALLOW-FROM 时,只允许加载指定的源。

4、缺少“X-XSS-Protection”头

修复nginx.conf配置文件

add_header X-XSS-Protection "1; mode=block";

解答:该响应头是用于防范及过滤 XSS 的。可用的几个指令如下:

X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=

说明:
0,禁用 XSS 过滤
1,开启 XSS 过滤
1; mode=block,开启 XSS 过滤,并且若检查到 XSS 攻击,停止渲染页面。
X-XSS-Protection: 1; report=,开启 XSS 过滤,并且若检查到 XSS 攻击,将使用指导的 url 来发送报告。

5、已解密的登录请求

前端VUE需要进行对密码进行RSA加密
Vue需要安装依赖
npm install jsencrypt --save
在使用到的地方添加如下代码:

import JsEncrypt from 'jsencrypt' 
Vue.prototype.$jsEncrypt = JsEncrypt

将加密解密方法封装到通用的js内

let publicKey = '这里是封装的公钥'
let privateKey = '这里是封装的私钥'
//加密方法
  RSAencrypt(pas){
    //实例化jsEncrypt对象
    let jse = new JSEncrypt();
    //设置公钥
    jse.setPublicKey(publicKey);
    // console.log('加密:'+jse.encrypt(pas))
    return jse.encrypt(pas);
  },
  
//解密方法
  RSAdecrypt(pas){
    let jse = new JSEncrypt();
    // 私钥
    jse.setPrivateKey(privateKey)
    // console.log('解密:'+jse.decrypt(pas))
    return jse.decrypt(pas);
  },

后端解密方法请查阅一下链接:
https://blog.csdn.net/li521wang/article/details/86618634

6、会话标识未更新

风险描述:可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
解决办法:增加如下工具类:

/**
 * 重置sessionid,原session中的数据自动转存到新session中  * @param request
 */
public static void reGenerateSessionId(HttpServletRequest request) {
    HttpSession session = request.getSession();
    //首先将原session中的数据转移至一临时map中
    Map<String, Object> tempMap = new HashMap();
    Enumeration<String> sessionNames = session.getAttributeNames();
    while (sessionNames.hasMoreElements()) {
        String sessionName = sessionNames.nextElement();
        tempMap.put(sessionName, session.getAttribute(sessionName));
    }
    //注销原session,为的是重置sessionId      session.invalidate();
    // 将临时map中的数据转移至新session
    session = request.getSession();
    for (Map.Entry<String, Object> entry : tempMap.entrySet()) {
        session.setAttribute(entry.getKey(), entry.getValue());
    }
}

在用户登录成功之后调用此方法。

7、SRI (Subresource Integrity) 的检查

风险描述:面对国内的形式,各种灰产,比如你的脚本被注入,导致打开网页就弹支付宝花呗红包之类的…
子资源完整性 Subresource Integrity 简称 SRI 是一种安全机制,它用于让浏览器检查所下载的来自第三方的资源(例如 CDN)未被恶意篡改。它使用哈希值检查确保第三方资源的完整性。只要开发者提供了被需下载资源的哈希值,浏览器就可以检查实际下载的文件是否与预期的哈希值匹配。
解决办法:由于前段调用第三方CDN服务器上的JS导致,将服务器上JS 下载到本地
如果项目中一定要使用外网CDN服务器,可以参考以下链接:
https://www.zhihu.com/question/35720092/answer/523563873

你可能感兴趣的:(网络安全)