diff --git a/.gitignore b/.gitignore
index f3d8733..7a6c551 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@
locales/po/*.mo
vendor/
+.omc/
diff --git a/index.php b/index.php
index 362957c..96be144 100644
--- a/index.php
+++ b/index.php
@@ -1,5 +1,7 @@
' . PHP_EOL;
- print '' . PHP_EOL;
+ print '' . PHP_EOL;
print '';
}
@@ -548,23 +548,23 @@ function monitorRenderGroupingDropdowns(array $classes, array $criticalities, ar
*/
function monitorRenderHiddenFilterInputs(): void {
if (get_request_var('grouping') != 'tree') {
- print '
| ' . PHP_EOL;
+ print ' | ' . PHP_EOL;
}
if (get_request_var('grouping') != 'site') {
- print ' | ' . PHP_EOL;
+ print ' | ' . PHP_EOL;
}
if (get_request_var('grouping') != 'template') {
- print ' | ' . PHP_EOL;
+ print ' | ' . PHP_EOL;
}
if (get_request_var('view') == 'list') {
- print ' | ' . PHP_EOL;
+ print ' | ' . PHP_EOL;
}
if (get_request_var('view') != 'default') {
- print ' | ' . PHP_EOL;
+ print ' | ' . PHP_EOL;
}
}
diff --git a/monitor_render.php b/monitor_render.php
index 98c706d..90d1360 100644
--- a/monitor_render.php
+++ b/monitor_render.php
@@ -962,7 +962,7 @@ function renderHeaderList(int $total_rows = 0, int $rows = 0): string {
ob_start();
- $nav = html_nav_bar('monitor.php?rfilter=' . get_request_var('rfilter'), MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 12, __('Devices'), 'page', 'main');
+ $nav = html_nav_bar('monitor.php?rfilter=' . rawurlencode(get_request_var('rfilter')), MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 12, __('Devices'), 'page', 'main');
html_start_box(__('Monitored Devices', 'monitor'), '100%', false, 3, 'center', '');
@@ -1042,7 +1042,7 @@ function renderFooterList(int $total_rows, int $rows): string {
html_end_box(false);
if ($total_rows > 0) {
- $nav = html_nav_bar('monitor.php?rfilter=' . get_request_var('rfilter'), MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 12, __('Devices'), 'page', 'main');
+ $nav = html_nav_bar('monitor.php?rfilter=' . rawurlencode(get_request_var('rfilter')), MAX_DISPLAY_PAGES, get_request_var('page'), $rows, $total_rows, 12, __('Devices'), 'page', 'main');
print $nav;
}
diff --git a/setup.php b/setup.php
index 283d533..2afafb9 100644
--- a/setup.php
+++ b/setup.php
@@ -1,4 +1,6 @@
[
+ "html_escape(get_request_var('downhosts'))",
+ "html_escape(get_request_var('mute'))",
+ "html_escape(get_request_var('tree'))",
+ "html_escape(get_request_var('site'))",
+ "html_escape(get_request_var('template'))",
+ "html_escape(get_request_var('size'))",
+ "html_escape(get_request_var('trim'))",
+ ],
+ __DIR__ . '/../../monitor_render.php' => [
+ "rawurlencode(get_request_var('rfilter'))",
+ ],
+];
+
+foreach ($checks as $path => $patterns) {
+ $contents = file_get_contents($path);
+
+ if ($contents === false) {
+ fwrite(STDERR, "Unable to read {$path}\n");
+ exit(1);
+ }
+
+ foreach ($patterns as $pattern) {
+ if (strpos($contents, $pattern) === false) {
+ fwrite(STDERR, "Missing expected output hardening: {$pattern}\n");
+ exit(1);
+ }
+ }
+}
+
+print "OK\n";
diff --git a/tests/e2e/test_monitor_no_raw_request_reuse.php b/tests/e2e/test_monitor_no_raw_request_reuse.php
new file mode 100644
index 0000000..73be1e9
--- /dev/null
+++ b/tests/e2e/test_monitor_no_raw_request_reuse.php
@@ -0,0 +1,40 @@
+ [
+ "get_request_var('downhosts') . '\">'",
+ "get_request_var('site') . '\">'",
+ "get_request_var('template') . '\">'",
+ "get_request_var('size') . '\">'",
+ "get_request_var('trim') . '\">'",
+ ],
+ __DIR__ . '/../../monitor_render.php' => [
+ "monitor.php?rfilter=' . get_request_var('rfilter')",
+ ],
+];
+
+foreach ($checks as $path => $patterns) {
+ $contents = file_get_contents($path);
+
+ if ($contents === false) {
+ fwrite(STDERR, "Unable to read {$path}\n");
+ exit(1);
+ }
+
+ foreach ($patterns as $pattern) {
+ if (strpos($contents, $pattern) !== false) {
+ fwrite(STDERR, "Raw request reuse remains: {$pattern}\n");
+ exit(1);
+ }
+ }
+}
+
+print "OK\n";
diff --git a/tests/unit/test_request_output_escaping.php b/tests/unit/test_request_output_escaping.php
new file mode 100644
index 0000000..a9cd09b
--- /dev/null
+++ b/tests/unit/test_request_output_escaping.php
@@ -0,0 +1,19 @@
+