From a67de7a8f16a01d20b402da84eba10fcb58fc60a Mon Sep 17 00:00:00 2001 From: wrongecho Date: Thu, 9 Jan 2025 16:09:39 +0000 Subject: [PATCH] Prevent post pages being accessed directly --- CHANGELOG.md | 4 +++- admin_role.php | 7 +++---- post.php | 15 ++++----------- post/admin/admin_api.php | 2 ++ post/admin/admin_backup.php | 2 ++ post/admin/admin_bulk_mail.php | 3 +++ post/admin/admin_category.php | 2 ++ post/admin/admin_category_model.php | 2 ++ post/admin/admin_custom_field.php | 2 ++ post/admin/admin_custom_field_model.php | 2 ++ post/admin/admin_custom_link.php | 2 ++ post/admin/admin_document_template.php | 2 ++ post/admin/admin_mail_queue.php | 2 ++ post/admin/admin_project_template.php | 2 ++ post/admin/admin_role.php | 10 ++++++++++ post/admin/admin_settings_ai.php | 2 ++ post/admin/admin_settings_company.php | 2 ++ post/admin/admin_settings_default.php | 2 ++ post/admin/admin_settings_integration.php | 2 ++ post/admin/admin_settings_invoice.php | 2 ++ post/admin/admin_settings_localization.php | 2 ++ post/admin/admin_settings_mail.php | 1 + post/admin/admin_settings_module.php | 2 ++ post/admin/admin_settings_notification.php | 2 ++ post/admin/admin_settings_online_payment.php | 2 ++ post/admin/admin_settings_project.php | 2 ++ post/admin/admin_settings_quote.php | 2 ++ post/admin/admin_settings_security.php | 2 ++ post/admin/admin_settings_telemetry.php | 2 ++ post/admin/admin_settings_theme.php | 2 ++ post/admin/admin_settings_ticket.php | 2 ++ post/admin/admin_software_template.php | 2 ++ post/admin/admin_tag.php | 2 ++ post/admin/admin_tag_model.php | 2 ++ post/admin/admin_tax.php | 2 ++ post/admin/admin_ticket_status.php | 2 ++ post/admin/admin_ticket_template.php | 2 ++ post/{ => admin}/admin_update.php | 2 ++ post/admin/admin_user.php | 2 ++ post/admin/admin_user_model.php | 2 ++ post/admin/admin_vendor_template.php | 2 ++ post/user/account.php | 2 ++ post/user/asset.php | 2 ++ post/user/asset_interface_model.php | 2 ++ post/user/asset_model.php | 2 ++ post/user/budget.php | 3 +++ post/user/certificate.php | 2 ++ post/user/certificate_model.php | 2 ++ post/user/client.php | 2 ++ post/user/client_model.php | 2 ++ post/user/contact.php | 2 ++ post/user/contact_model.php | 1 + post/user/credential.php | 2 ++ post/user/credential_model.php | 2 ++ post/user/document.php | 2 ++ post/user/document_model.php | 2 ++ post/user/domain.php | 2 ++ post/user/domain_model.php | 2 ++ post/user/event.php | 2 ++ post/user/event_model.php | 2 ++ post/user/expense.php | 2 ++ post/user/expense_model.php | 2 ++ post/user/file.php | 2 ++ post/user/folder.php | 2 ++ post/user/invoice.php | 2 ++ post/user/invoice_model.php | 1 + post/user/location.php | 2 ++ post/user/location_model.php | 2 ++ post/user/network.php | 2 ++ post/user/network_model.php | 2 ++ post/user/product.php | 2 ++ post/user/product_model.php | 2 ++ post/user/profile.php | 2 ++ post/user/project.php | 2 ++ post/user/quote.php | 2 ++ post/user/quote_model.php | 2 ++ post/user/rack.php | 2 ++ post/user/revenue.php | 2 ++ post/user/service.php | 2 ++ post/user/software.php | 1 + post/user/task.php | 2 ++ post/user/ticket.php | 2 ++ post/user/ticket_recurring_model.php | 1 + post/user/transfer.php | 2 ++ post/user/transfer_model.php | 2 ++ post/user/trip.php | 2 ++ post/user/trip_model.php | 2 ++ post/user/vendor.php | 2 ++ post/user/vendor_contact.php | 2 ++ post/user/vendor_contact_model.php | 1 + post/user/vendor_model.php | 2 ++ 91 files changed, 190 insertions(+), 16 deletions(-) rename post/{ => admin}/admin_update.php (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75e57a9f..446ca6e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,9 @@ All notable changes to ITFlow will be documented in this file. - Bugfix: Asset interface losing DHCP setting - Bugfix: Editing / creating recurring expenses results in error 500 due to incorrect var name - Stripe online payment setup now prompts you to set the income/expense account -- Admin pages now once again use the new admin rolecheck +- Admin pages now once again use the new admin role-check +- Debug now shows the current git branch +- Individual POST handler logic pages can no longer be accessed directly ## 24.12 diff --git a/admin_role.php b/admin_role.php index 241a116f..800b58cc 100644 --- a/admin_role.php +++ b/admin_role.php @@ -110,11 +110,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - - - - + + Archive + diff --git a/post.php b/post.php index f09d2141..69a21561 100644 --- a/post.php +++ b/post.php @@ -10,6 +10,9 @@ require_once "functions.php"; require_once "check_login.php"; +// Define a variable that we can use to only allow running post files via inclusion (prevents people/bots poking them) +define('FROM_POST_HANDLER', true); + // Determine which files we should load @@ -28,13 +31,7 @@ if (str_contains($module, 'admin') && isset($session_is_admin) && $session_is_ad // To add a new admin POST request handler, add a file named after the admin page // e.g. changes made on the page http://itflow/admin_ticket_statues.php will load the page post/admin/admin_ticket_statues.php to handle the changes - if ($module !== 'admin_update') { - require_once "post/admin/$module.php"; - } - // IF statement is temporary - - - + require_once "post/admin/$module.php"; } elseif (str_contains($module, 'xcustom')) { // Dynamically load any custom POST logic @@ -58,10 +55,6 @@ if (str_contains($module, 'admin') && isset($session_is_admin) && $session_is_ad // Logout is the same for user and admin require_once "post/logout.php"; -// TODO: Move admin_update into the admin section to be auto-loaded -// We can't do this until everyone has the new database fields added in 1.4.9 on Sept 14th 2024 -require_once "post/admin_update.php"; // Load updater - // TODO: Find a home for these require_once "post/ai.php"; diff --git a/post/admin/admin_api.php b/post/admin/admin_api.php index 8817b62a..073f2afd 100644 --- a/post/admin/admin_api.php +++ b/post/admin/admin_api.php @@ -4,6 +4,8 @@ * ITFlow - GET/POST request handler for API settings */ +defined('FROM_POST_HANDLER') || die("Direct file access is not allowed"); + if (isset($_POST['add_api_key'])) { validateCSRFToken($_POST['csrf_token']); diff --git a/post/admin/admin_backup.php b/post/admin/admin_backup.php index 8649e91d..dfb0509a 100644 --- a/post/admin/admin_backup.php +++ b/post/admin/admin_backup.php @@ -4,6 +4,8 @@ * ITFlow - GET/POST request handler for DB / master key backup */ +defined('FROM_POST_HANDLER') || die("Direct file access is not allowed"); + if (isset($_GET['download_database'])) { validateCSRFToken($_GET['csrf_token']); diff --git a/post/admin/admin_bulk_mail.php b/post/admin/admin_bulk_mail.php index cdbf999f..4ddc0651 100644 --- a/post/admin/admin_bulk_mail.php +++ b/post/admin/admin_bulk_mail.php @@ -4,6 +4,9 @@ * ITFlow - GET/POST request handler for bulk email */ +defined('FROM_POST_HANDLER') || die("Direct file access is not allowed"); + + if (isset($_POST['send_bulk_mail_now'])) { if (isset($_POST['contact_ids'])) { diff --git a/post/admin/admin_category.php b/post/admin/admin_category.php index c3a97fc2..b5bd1273 100644 --- a/post/admin/admin_category.php +++ b/post/admin/admin_category.php @@ -4,6 +4,8 @@ * ITFlow - GET/POST request handler for categories ('category') */ +defined('FROM_POST_HANDLER') || die("Direct file access is not allowed"); + if (isset($_POST['add_category'])) { require_once 'post/admin/admin_category_model.php'; diff --git a/post/admin/admin_category_model.php b/post/admin/admin_category_model.php index 92b0c6ba..81b54a39 100644 --- a/post/admin/admin_category_model.php +++ b/post/admin/admin_category_model.php @@ -1,4 +1,6 @@