SailsJS中ClickJacking配置在curl根路径请求时缺失X-Frame-Options问题
问题分析
你的问题核心在于:Sails默认的X-Frame-Options安全中间件仅作用于最终返回2xx状态码的路由响应,而根路径/返回的是3xx重定向响应,没有经过该中间件的处理,因此缺失对应的响应头。
解决方案
1. 自定义全局中间件统一添加响应头
在Sails中通过自定义HTTP中间件,确保所有响应(包括重定向的3xx响应)都带上X-Frame-Options头:
- 打开
config/http.js文件 - 在
middleware对象中添加自定义中间件:middleware: { // 其他默认中间件... addFrameOptionsHeader: function(req, res, next) { // 这里使用你之前配置的X-Frame-Options值,比如 DENY 或 SAMEORIGIN res.setHeader('X-Frame-Options', 'DENY'); next(); } }, - 在
middleware.order数组中,将addFrameOptionsHeader放到靠前的位置(比如在cookieParser之后、session之前),确保它在所有路由处理和重定向之前执行:order: [ 'addFrameOptionsHeader', 'cookieParser', 'session', // 其他中间件... ]
2. 验证效果
执行以下命令测试根路径的响应头:
curl -v https://{SiteURL}/
此时应该能在3xx重定向的响应头中看到X-Frame-Options字段;同时再次测试默认状态路径:
curl -v https://{SiteURL}/{DefaultState}
确认该路径的响应头依然保留正确的X-Frame-Options配置。
3. 补充说明
Sails官方文档中的ClickJacking方案,默认是绑定在视图渲染或静态资源返回的流程中,仅处理最终的页面响应。而路由重定向属于早期的响应输出,不会触发后续的视图处理中间件,因此需要通过全局中间件来覆盖所有场景。
内容的提问来源于stack exchange,提问作者Pathik Parikh
相关产品推荐
相关产品推荐

