aboutsummaryrefslogtreecommitdiff
path: root/p/api/query.php
diff options
context:
space:
mode:
authorGravatar Inverle <inverle@proton.me> 2025-08-11 19:35:54 +0200
committerGravatar GitHub <noreply@github.com> 2025-08-11 19:35:54 +0200
commit7df6c201f2e6a6521d20718dfd8d9794c7437d1f (patch)
treefbd88eb2c462808b16e9ee476b3c619e3b2bb20c /p/api/query.php
parent2b1b268fc27268197b8c86ed839bf22daab79438 (diff)
Put CSP everywhere (#7810)
* Puts CSP everywhere in `p/api` * including the HTML query page ❗ * Also in `p/ext.php` * Puts `X-Content-Type-Options: nosniff` everywhere * Fixes custom icon configuration not showing `blob:` icon in statsController (idle feeds) * Also removes `style-src 'unsafe-inline'` since it doesn't seem to be needed * Improves CSP of `p/f.php` * Add `sandbox` directive
Diffstat (limited to 'p/api/query.php')
-rw-r--r--p/api/query.php7
1 files changed, 7 insertions, 0 deletions
diff --git a/p/api/query.php b/p/api/query.php
index 5deedc932..f7458e823 100644
--- a/p/api/query.php
+++ b/p/api/query.php
@@ -1,5 +1,8 @@
<?php
declare(strict_types=1);
+
+header('X-Content-Type-Options: nosniff');
+
require(__DIR__ . '/../../constants.php');
require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader
@@ -175,10 +178,12 @@ if (($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') {
if (in_array($format, ['rss', 'atom'], true)) {
header('Content-Type: application/rss+xml; charset=utf-8');
+ header("Content-Security-Policy: default-src 'none'; frame-ancestors 'none'; sandbox");
$view->_layout(null);
$view->_path('index/rss.phtml');
} elseif (in_array($format, ['greader', 'json'], true)) {
header('Content-Type: application/json; charset=utf-8');
+ header("Content-Security-Policy: default-src 'none'; frame-ancestors 'none'; sandbox");
$view->_layout(null);
$view->type = 'query/' . $token;
$view->list_title = $query->getName();
@@ -190,9 +195,11 @@ if (in_array($format, ['rss', 'atom'], true)) {
die();
}
header('Content-Type: application/xml; charset=utf-8');
+ header("Content-Security-Policy: default-src 'none'; frame-ancestors 'none'; sandbox");
$view->_layout(null);
$view->_path('index/opml.phtml');
} else {
+ header("Content-Security-Policy: default-src 'self'; frame-src *; img-src * data:; frame-ancestors 'none'; media-src *");
$view->_layout('layout');
$view->_path('index/html.phtml');
}