文章目錄
- 說明
- 示例(返回404)
- 示例(創建CSP例外)
說明
日期: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' // 標準位置];// 統一處理:返回404WELL_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'));
});