CSP严格模式返回不存在的爬虫相关文件

发布于:2025-06-07 ⋅ 阅读:(15) ⋅ 点赞:(0)

说明

日期:2025年6月4日。

CSP严格模式是default-src 'none',但有些web应用中,在爬虫相关文件不存在的情况下,依旧返回了对应文件,而且服务器状态时200,这就导致CSP严格模式违规。

原因是特殊文件的"爬虫友好"设计原则:

  • 搜索引擎优化(SEO)的核心文件
  • 历史惯例要求这些文件必须可访问(即使内容为空)
  • 返回 404 可能被搜索引擎解释为"网站不支持 SEO"。

虽然导致CSP严格模式违规,但并非不能用这些文件。

要根据自身网站需要,对所需的文件创建CSP例外。

示例(返回404)

日期:2025年6月4日。
操作系统:Alibaba Cloud Linux 3.2104 LTS 64位。
应用:

  • node.js v22.15.1
  • npm v11.4.1
// 需要特殊处理的SEO/安全文件列表
const WELL_KNOWN_FILES = [
    '/robots.txt',
    '/sitemap.xml',
    '/sitemap_index.xml', // 多站点地图情况
    '/favicon.ico',
    '/ads.txt',
    '/security.txt',
    '/.well-known/security.txt' // 标准位置
  ];
  
  // 统一处理:返回404
  WELL_KNOWN_FILES.forEach(path => {
    app.get(path, (req, res) => {
      // 可选:记录访问日志
      console.log(`Blocked access to ${path} from ${req.ip}`);
      res.status(404).end();
    });
  });

// 注册静态文件中间件,必须在统一处理之后
app.use(express.static(path.join(__dirname, 'testwebapp')));

示例(创建CSP例外)

日期:2025年6月4日。
操作系统:Alibaba Cloud Linux 3.2104 LTS 64位。
应用:

  • node.js v22.15.1
  • npm v11.4.1

以sitemap.xml为例。

注:

  • 仅当实际提供sitemap.xml时才需要添加例外。
  • XML文件本身应该是纯静态的。
  • 避免内联样式。
app.get('/sitemap.xml', (req, res) => {
  res.set('Content-Security-Policy', "default-src 'none'; style-src 'self'");
  res.sendFile(path.join(__dirname, 'public/sitemap.xml'));
});

网站公告

今日签到

点亮在社区的每一天
去签到