安全渗透测试解决方法以及使用nginx进行解决
线上安全环境维护
1.安全渗透测试解决方法
1.1中间件版本信息泄露漏洞
建议
在nginx的conf目录中,编辑nginx.conf文件,在http节点中添加server_tokens off,重启nginx,即可隐藏中间件版本。
解决方法
在nginx.conf的配置文件的http方法体中添加server_tokens off;
方法后重启或刷新nginx
最终结果:版本号被隐藏
1.2 HTTP X-Download-Options 响应头缺失
详细解释
X-Download-Options头信息是一种安全策略,用于控制浏览器如何处理文件下载。当浏览器收到包含X-Download-Options头信息的HTTP响应时,如果该头信息的值为"noopen",表示浏览器不应该自动打开文件,而是应该将文件保存到本地。
将X-Download-Options的值设置为"noopen"可以有效地防止文件被自动打开,从而提高Web应用程序的安全性
解决方法
add_header X-Download-Options "noopen" always;
备注
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
最终结果
1.3 HTTP Referrer-Policy 响应头缺失
详细解释
当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个 Referrer,用以指定该请求是从哪个页面跳转页来的,常被用于分析用户来源等信息。但是也成为了一个不安全的因素,所以就有了 Referrer-Policy,用于过滤 Referrer 报头内容,其可选的项有: no-referrer no-referrer-when-downgrade origin origin-when-cross-origin same-origin strict-origin strict-origin-when-cross-origin unsafe-url
解决方法
add_header Referrer-Policy "same-origin" always;
备注
配置参数:
no-referrer-when-downgrade:在同等安全等级下(例如https页面请求https地址),发送referer,但当请求方低于发送方(例如https页面请求http地址),不发送referer
origin:仅仅发送origin,即protocal+host
origin-when-cross-origin:跨域时发送origin
same-origin:当双方origin相同时发送
strict-origin:当双方origin相同且安全等级相同时发送
unfafe-url:任何情况下都显示完整的referer
最终结果
1.4 HTTP Content-Security-Policy 响应头缺失
详细解释
Content-Security-Policy头信息是一种安全策略,用于限制页面中可以加载的资源,从而有效地减少恶意攻击的风险。CSP策略指定了允许加载的资源的源,包括脚本、样式、图片、字体、媒体和其他资源。当浏览器收到包含Content-Security-Policy头信息的HTTP响应时,会根据CSP策略限制页面加载的资源。
解决方法
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'" always;
备注
将Content-Security-Policy的值设置为"script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’"表示允许页面加载与当前页面同源的脚本,以及内联脚本和eval函数的使用。这可以确保页面加载的脚本都是可信的,并限制了注入恶意脚本的可能性。
配置策略:
script-src:外部脚本
style-src:样式表
img-src:图像
media-src:媒体文件(音频和视频)
font-src:字体文件
object-src:插件(比如 Flash)
child-src:框架
frame-ancestors:嵌入的外部资源(比如<frame>、<iframe>、<embed>和<applet>)
connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
worker-src:worker脚本
manifest-src:manifest 文件
最终结果
1.5 HTTP X-Permitted-Cross-Domain-Policies 响应头缺失
详细解释
X-Permitted-Cross-Domain-Policies头信息是一种安全策略,用于控制其他域名可以如何使用当前域名的资源。当浏览器收到包含X-Permitted-Cross-Domain-Policies头信息的HTTP响应时,会根据该头信息的值来限制其他域名对当前域名资源的访问。
一个针对flash的安全策略,用于指定当不能将"crossdomain.xml"文件(当需要从别的域名中的某个文件中读取 Flash 内容时用于进行必要设置的策略文件)放置在网站根目录等场合时采取的替代策略。
解决方法
add_header X-Permitted-Cross-Domain-Policies "master-only" always;
备注
将X-Permitted-Cross-Domain-Policies的值设置为"master-only"表示只允许当前域名的主站点使用该站点的资源,其他域名不允许使用。这可以有效地限制其他域名对当前域名的资源的访问,从而提高Web应用程序的安全性。
配置值描述
none:不允许使用loadPolicyFile方法加载任何策略文件,包括此主策略文件。
master-only:只允许使用主策略文件[默认值]。
by-content-type:只允许使用loadPolicyFile方法加载HTTP/HTTPS协议下Content-Type 为text/x-cross-domain-policy的文件作为跨域策略文件。
by-ftp-filename:只允许使用loadPolicyFile方法加载FTP协议下文件名为 crossdomain.xml的文件作为跨域策略文件。
all:可使用loadPolicyFile方法加载目标域上的任何文件作为跨域策略文件,甚至是一 个JPG也可被加载为策略文件。
最终结果
1.6 点击劫持:缺少X-Frame-Options头
详细说明
是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,点击攻击者想要欺骗用户点击的位置。服务器端没有返回X-Frame-Options头部,导致该站点存在点击劫持攻击的威胁。X-Frame-Options HTTP 响应头,可以指示浏览器是否应该加载一个iframe中的页面。网站可以通过设置X-Frame-Options阻止站点内的页面被其他页面嵌入从而防止点击劫持。如果您确定不需要将网站内容嵌入其他站点中,请开启选项。
解决方法
add_header X-Frame-Options "sameorigin" always;
备注
将X-Frame-Options的值设置为"sameorigin"表示只允许页面在与当前页面同源的iframe中嵌入,而不允许在其他域名的iframe中嵌入。这可以有效地防止点击劫持等安全问题。
配置的三个参数:
deny 标识该页面不允许在frame中展示,即便在相同域名的页面中嵌套也不行。
sameorigin 可以在同域名的页面中frame中展示
allow-form url 指定的fream中展示。
eg:
add_header X-Frame-Options:ALLOW-FROM https://tongji.baidu.com;
最终结果
1.7 HTTP X-XSS-Protection 响应头缺失
详细说明
X-XSS-Protection头信息是一种安全策略,用于防止跨站脚本攻击(XSS)的发生。当浏览器收到包含X-XSS-Protection头信息的HTTP响应时,如果检测到潜在的XSS攻击,浏览器会自动阻止页面的渲染,并显示一个警告页面或重定向到其他页面,从而保护用户的安全。
解决方法
add_header X-XSS-Protection "1; mode=block" always;
备注
将X-XSS-Protection的值设置为"1; mode=block"可以启用浏览器的内置XSS防护机制,并阻止页面渲染,从而防止潜在的XSS攻击。"1"表示启用XSS防护机制,"mode=block"表示如果检测到潜在的XSS攻击,浏览器会阻止页面渲染
配置参数:
X-XSS-Protection: 0 关闭防护
X-XSS-Protection: 1 开启防护
X-XSS-Protection: 1; mode=block 开启防护 如果被攻击,阻止脚本执行。
X-XSS-Protection: 1; report=<reporting-uri> 启用 XSS 过滤。如果检测到跨站脚本攻击,浏览器将清除页面并使用 CSP report-uri 指令的功能发送违规报告。
最终结果
1.8 HTTP X-Content-Type-Options 响应头缺失
详细说明
X-Content-Type-Options头信息是一种安全策略,用于防止浏览器在解析响应内容类型时执行MIME类型嗅探。MIME类型嗅探是一种浏览器行为,它会在某些情况下忽略服务器返回的Content-Type头信息,而是根据文件内容推断出MIME类型。这种行为可能会导致安全问题,例如在解析HTML页面时执行脚本或渲染嵌入式内容。
网络请求中,每个资源都有自己的类型,比如Content-Type:text/html 、image/png、 text/css。但是有一些资源的类型是未定义或者定义错了,导致浏览器会猜测资源类型,尝试解析内容,从而给了脚本攻击可乘之机。比如利用一个图片资源去执行一个恶意脚本。
解决方法
add_header X-Content-Type-Options "nosniff" always;
备注
通过设置 X-Content-Type-Options: nosniff ,浏览器严格匹配资源类型,会拒绝加载错误或者不匹配的资源类型。(PS:排查问题过程中,网上看到一个人用流的方式从后台给前台传图片,大概代码 由于后端未指定资源类型,导致增加该配置后无法显示图片)
nosniff 只应用于以下两种情况的请求将被阻止:
请求类型是 style 但是 MIME 类型不是 text/css。
请求类型是 script 但是 MIME 类型不是 JavaScript MIME 类型。
最终结果
1.9 HTTP Strict-Transport-Security 响应头缺失
详细说明
STS是一种安全协议,用于保护Web应用程序免受SSL/TLS剥离攻击。当浏览器收到包含STS头信息的HTTPS响应时,会将该网站的所有后续请求都强制使用HTTPS协议,从而提高连接的安全性。当 Web 服务器的 HTTP 头中包含 Strict-Transport-Security 头时,浏览器将持续使用 HTTPS 来访问 Web 站点,可以用来对抗协议降级攻击和 Cookie 劫持攻击。
告诉浏览器只能通过https访问当前资源。
解决方法
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
备注
将Strict-Transport-Security的值设置为"max-age=63072000; includeSubdomains; preload"表示启用STS,并将其最长有效期设置为两年(63072000秒),同时包括所有子域名(includeSubdomains)和预加载(preload)。
最终结果
2.本地配置启动nginx时的疑难点
2.1 设置server方法块的时候请保证每个方法块一次执行成功在继续往下执行
2.2 使用cmd 用nginx命令直接启动后窗口不会关闭,这时候点击关闭窗口程序将会继续执行并不会被关闭,可通过命令进行关闭,或者使用ctrl+shidft+delete打开设备管理器,找到详细进程关闭nginx程序
2.3 nginx命令
检查是否格式错误:nginx -t
开启:start nginx 或者nginx
指定nginx的配置文件: ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重启:nginx -s reload
退出:nginx -s stop
有序完整的退出:nginx -s quit
//其他命令重启、关闭nginx
//查看nginx相关信息
ps -ef | grep nginx
//从容停止Nginx
kill -QUIT 主进程号
//快速停止Nginx
kill -TERM 主进程号
//强制停止Nginx
pkill -9 nginx
//平滑重启nginx:
kill -HUP 主进程号
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)