修改nginx.conf配置文件
http {
server_tokens off; #默认是注释掉的
}
修改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
修改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 时,只允许加载指定的源。
修复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 来发送报告。
前端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
风险描述:可能会窃取或操纵客户会话和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());
}
}
在用户登录成功之后调用此方法。
风险描述:面对国内的形式,各种灰产,比如你的脚本被注入,导致打开网页就弹支付宝花呗红包之类的…
子资源完整性 Subresource Integrity 简称 SRI 是一种安全机制,它用于让浏览器检查所下载的来自第三方的资源(例如 CDN)未被恶意篡改。它使用哈希值检查确保第三方资源的完整性。只要开发者提供了被需下载资源的哈希值,浏览器就可以检查实际下载的文件是否与预期的哈希值匹配。
解决办法:由于前段调用第三方CDN服务器上的JS导致,将服务器上JS 下载到本地
如果项目中一定要使用外网CDN服务器,可以参考以下链接:
https://www.zhihu.com/question/35720092/answer/523563873