下面是由AppScan测试工具所扫描出的一些Web安全漏洞,将解决方案记录在此。(应用使用了Nginx作为反向代理服务器,本文的解决方案都是基于Nginx配置的)
安全漏洞清单:
解决方案(以下涉及的配置文件指Nginx服务器的配置文件nginx.conf):
1.加密会话(SSL)Cookie中缺少Secure属性
我这里使用proxy_cookie_path是因为,后端应用里写了添加Set-Cookie请求头的代码(但没有加上,Secure、SameSite属性,在代码里加上也是ok的),所以在Nginx我做下替换。
表示将Path的值由“/cas”替换成“/cas;SameSite=None;Secure”
相当于将后端代码修改为 -
httpresponse.setHeader("Set-Cookie", "JSESSIONID" + httprequest.getSession().getId() + "Path=/cas;SameSite=None;Secure;HttpOnly=true")
Set-Cookie响应头参数:
HttpOnly :
在Cookie中设置了“HttpOnly”属性,通过程序(JS脚本、Applet等)将无法读取到Cookie信息。
将HttpOnly 设置为true 防止程序获取cookie后进行攻击。–https://blog.csdn.net/ztnhnr/article/details/109447507
Secure :
安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问。
设置了Secure
(没有值),则只有当使用https协议连接时cookie才可以被页面访问。可用于防止信息在传递的过程中被监听捕获后信息泄漏。 --https://blog.csdn.net/ztnhnr/article/details/109447507
SameSite:
Chrome浏览器在51版本后为 Cookie 新增的属性,用来防止 CSRF 攻击和用户追踪。可以设置三个值:Strict、
Lax、 NoneStrict:完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL
与请求目标一致,才会带上 Cookie。Set-Cookie: CookieName=CookieValue;
SameSite=Strict;Lax:规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。Set-Cookie:
CookieName=CookieValue; SameSite=Lax;设置了Strict或Lax以后,基本就杜绝了 CSRF
攻击。当然,前提是用户浏览器支持 SameSite 属性。None:Chrome
计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie
只能通过 HTTPS 协议发送),否则无效。Set-Cookie: key=value; SameSite=None; Secure
–https://blog.csdn.net/ztnhnr/article/details/109447507
2.检测到弱密码套件:不支持完全前向保密、弱密码套件-ROBOT 攻击: 服务器支持易受攻击的密码套件、检测到SHA-1密码套件(这里前端请求使用的是https,http请求请忽略)
这个具体还要看安全报告,扫描到哪些弱密码套件(加密算法),我的是以下这些,于是添加**!RSA**用于表示不使用RSA系列的加密算法
3.HTTP Strict-Transport-Security头缺失或不安全
添加请求头"Strict-Transport-Security", 值为" ‘max-age=63072000;includeSubDomains’ "
HTTP Strict Transport Security (通常简称为HSTS)
是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式.
max-age代表HSTS在客户端的生效时间。 includeSubdomains表示对所有子域名生效
(HSTS 具体让浏览器做了什么,可以看下文章https://blog.csdn.net/u012560410/article/details/86489979)
4.具有不安全、不正确或缺少SameSite属性的Cookie
同第一点
5.在应用程序中发现不必要的Http响应头
我这里只是简单隐藏了服务器版本信息,但依旧会返回Server:nginx
6."Content-Security-Policy"头中缺少"Frame-Anchors"策略或策略不安全
添加请求头"X-Frame-Options", 值为"SAMEORIGIN"
X-Frame-Options - 用来给浏览器指示允许一个页面可否在 , 或者
中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中,也从而避免了点击劫持 (ClickJacking)
的攻击。 --https://blog.whsir.com/post-3919.html
X-Frame-Options的三个参数:
(1)DENY
表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也不允许。
(2)SAMEORIGIN
表示该页面可以在相同域名页面的frame中展示。
(3)ALLOW-FROM uri
表示该页面可以在指定uri的frame中展示
7."Content-Security-Policy"头中缺少"Object-Src"策略或策略不安全
添加请求头"Content-Security-Policy", 值为" object-src ‘none’; script-src ‘self’ ‘unsafe-inline’ "
8."Content-Security-Policy"头中缺少"Script-Src"策略或策略不安全
同上,这里将将object-src和script-src策略放在一起,是为了避免AppScan测试工具的漏扫,当然也可以分开配置在两个Content-Security-Policy请求头中。
9.“X-XSS-Protection”头缺失或不安全
添加请求头"X-Xss-Protection", 值为"1;mode=block" (指启用XSS保护,并在检查到XSS攻击时,停止渲染页面)
10.支持较老的TLS版本(这里前端请求使用的是https,http请求请忽略)
不再使用老版本TLS1.1(不配置ssl_protocols的话默认会使用TlS1.1的 - ssl_protocols默认配置:ssl_protocols TLSv1 TLSv1.1 TLSv1.2;)
ssl_protocols - 用于配置加密安全协议TLS的版本