当前位置:网站首页 >  攻略

3个Web开发高频低危漏洞修复 附全场景可直接复制的配置代码

时间:2026年05月31日 18:00:08 来源:易频IT社区

一、前置检查:用浏览器快速定位漏洞

修复前先确认漏洞存在,用谷歌/Edge浏览器控制台即可,无需专业扫描器(后续若需批量扫描,可用免费的OWASP ZAP)。

  • 检查HTTP TRACE漏洞:按F12打开控制台→切换到Console标签→输入fetch(window.location.href, {method: 'TRACE'})回车→若返回Response状态码为200且含TRACE开头的响应头,说明存在。
  • 检查Cookie安全属性:按F12→切换到Application标签→左侧展开Cookies→点击当前域名→查看HttpOnly列(若有打勾图标则有,否则无)、Secure列(同HttpOnly规则)。
  • 检查X-Frame-Options漏洞:按F12→切换到Network标签→刷新页面→随便点一个HTML资源的响应→查看Response Headers里是否有X-Frame-Options或Content-Security-Policy的frame-ancestors规则,无则存在。

二、修复方案1:关闭HTTP TRACE方法

TRACE方法是HTTP调试用的,会返回完整的请求头/正文,攻击者可能结合其他漏洞窃取Cookie或XSS payload。关闭操作根据Web服务器不同,有Nginx、Apache、Tomcat三种主流方案。

1. Nginx服务器

编辑Nginx主配置文件或站点配置文件(通常在/etc/nginx/nginx.conf/etc/nginx/sites-available/站点域名.conf),找到http块或server块,添加以下配置后重启生效:

```nginx 全局或站点级别禁用TRACE方法 if ($request_method = TRACE) { return 405; } ```

验证生效:用前置检查方法测试,返回405 Method Not Allowed即可。

2. Apache服务器

编辑Apache主配置文件(通常在/etc/httpd/conf/httpd.conf/etc/apache2/apache2.conf)或站点配置文件,找到Directory块或VirtualHost块,添加以下配置后重启生效:

```apache 全局或站点级别禁用TRACE方法 TraceEnable Off ```

验证生效:前置检查返回405或403即可。

3. Tomcat服务器

编辑Tomcat的server.xml(通常在/usr/local/tomcat/conf/server.xml或本地安装目录的conf/server.xml),找到所有带protocol="HTTP/1.1"的Connector标签,添加属性allowTrace="false"后重启生效:

```xml ```

3个Web开发高频低危漏洞修复 附全场景可直接复制的配置代码

验证生效:前置检查返回405即可。

三、修复方案2:设置Cookie的HttpOnly和Secure属性

HttpOnly属性禁止JavaScript通过document.cookie读取Cookie,防止XSS漏洞窃取;Secure属性要求Cookie仅通过HTTPS传输,防止中间人攻击。分后端代码设置和Web服务器代理设置两种方式。

1. 后端代码直接设置(优先推荐,精准可控)

  • Java(Servlet API): ```java Cookie cookie = new Cookie("user_token", "xxx"); cookie.setHttpOnly(true); // 必须设置 cookie.setSecure(true); // HTTPS环境必须设置,HTTP环境设为false cookie.setPath("/"); // 可选,建议设为根路径避免子路径访问不到 cookie.setMaxAge(3600); // 可选,设置过期时间,0为立即删除,负数为会话Cookie response.addCookie(cookie); ```
  • Java(Spring Boot 2.x/3.x): ```yaml application.yml server: servlet: session: cookie: http-only: true secure: true HTTPS环境自动生效,HTTP环境设为never path: / ``` 如果是自定义Cookie,直接用Servlet API设置或Spring的ResponseCookie: ```java ResponseCookie cookie = ResponseCookie.from("user_token", "xxx") .httpOnly(true) .secure(true) .path("/") .maxAge(Duration.ofHours(1)) .build(); response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString()); ```
  • Node.js(Express): ```javascript // 先安装cookie-parser:npm install cookie-parser const express = require('express'); const cookieParser = require('cookie-parser'); const app = express(); app.use(cookieParser()); app.get('/', (req, res) => { res.cookie('user_token', 'xxx', { httpOnly: true, secure: true, // HTTPS环境必须设置,HTTP环境设为false path: '/', maxAge: 3600 1000 // 毫秒为单位 }); res.send('Hello'); }); ```
  • PHP: ```php // 直接设置单个Cookie setcookie('user_token', 'xxx', [ 'expires' => time() + 3600, 'path' => '/', 'domain' => '', // 可选,当前域名默认 'secure' => true, // HTTPS必须,HTTP设为false 'httponly' => true, 'samesite' => 'Strict' // 可选,额外防止CSRF,Lax也可 ]); // 全局设置所有Cookie(php.ini) session.cookie_httponly = 1 session.cookie_secure = 1 ```

2. Web服务器代理设置(后端无法修改时使用)

以Nginx为例,编辑站点配置文件,在location /块中添加以下配置,覆盖或添加所有响应的Cookie属性:

```nginx location / { proxy_pass http://后端服务地址:端口; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 关键:修改所有Set-Cookie响应头,添加HttpOnly和Secure proxy_cookie_flags ~ secure httponly; } ```

验证生效:前置检查Application标签的HttpOnly和Secure列均有打勾即可。

四、修复方案3:配置X-Frame-Options或Content-Security-Policy的frame-ancestors

X-Frame-Options防止页面被嵌入到其他域名的iframe中,避免点击劫持(Clickjacking)攻击。X-Frame-Options已被Content-Security-Policy(CSP)的frame-ancestors替代,但仍需保留兼容性配置,两种一起用。

1. 兼容性X-Frame-Options配置

三种取值:

  • DENY:禁止所有iframe嵌入(最安全,适合不需要跨域嵌入的页面)
  • SAMEORIGIN:仅允许同域名的iframe嵌入(适合需要自身子页面嵌入的场景)
  • ALLOW-FROM 域名:仅允许指定单个域名嵌入(兼容性差,Chrome/Firefox已废弃,建议用CSP替代)

2. 主流Web服务器+后端代码配置

  • Nginx: ```nginx add_header X-Frame-Options SAMEORIGIN always; add_header Content-Security-Policy "frame-ancestors 'self';" always; ``` always参数确保错误页面(如404、500)也会添加响应头。
  • Apache: ```apache 先加载headers模块(可能已加载) LoadModule headers_module modules/mod_headers.so Header always set X-Frame-Options SAMEORIGIN Header always set Content-Security-Policy "frame-ancestors 'self';" ```
  • Tomcat: 编辑web.xml(全局配置)或项目的WEB-INF/web.xml(单个项目配置),添加过滤器: ```xml HttpHeaderFilter org.apache.catalina.filters.HttpHeaderSecurityFilter antiClickJackingEnabled true antiClickJackingOption SAMEORIGIN HttpHeaderFilter / ``` 单独添加CSP的frame-ancestors可以用Tomcat的自定义过滤器或Servlet设置响应头。
  • Spring Boot 2.x/3.x: ```yaml application.yml spring: security: headers: frame-options: same-origin: true 启用SAMEORIGIN content-security-policy: "frame-ancestors 'self';" ``` 如果项目未引入Spring Security,用拦截器设置: ```java @Component public class SecurityHeaderInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.setHeader("X-Frame-Options", "SAMEORIGIN"); response.setHeader("Content-Security-Policy", "frame-ancestors 'self';"); return true; } } // 注册拦截器 @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private SecurityHeaderInterceptor securityHeaderInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(securityHeaderInterceptor).addPathPatterns("/"); } } ```

3. 验证生效

前置检查Network标签的HTML资源响应头中,同时包含X-Frame-Options: SAMEORIGIN(或DENY)和Content-Security-Policy: frame-ancestors 'self';即可。也可以创建一个测试HTML文件,用iframe嵌入当前页面,若显示空白或被浏览器拦截,说明修复成功:

```html 点击劫持测试 ```

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图