From 0e33fd103c66fdcecbf38837308cbbe27033af01 Mon Sep 17 00:00:00 2001 From: slawkens Date: Sat, 16 Sep 2023 09:23:51 +0200 Subject: [PATCH] feature: csrf protection --- admin/pages/accounts.php | 6 ++ admin/pages/changelog.php | 5 +- admin/pages/dashboard.php | 2 + admin/pages/login.php | 2 + admin/pages/mailer.php | 2 + admin/pages/mass_account.php | 2 + admin/pages/mass_teleport.php | 2 + admin/pages/menus.php | 4 + admin/pages/modules/templates/web_status.twig | 1 + admin/pages/news.php | 9 +- admin/pages/notepad.php | 2 + admin/pages/players.php | 6 ++ admin/pages/plugins.php | 3 + admin/tools/settings_save.php | 2 + system/functions.php | 23 +++++ system/init.php | 9 ++ system/logout.php | 5 + system/pages/account/change_email.php | 8 +- system/settings.php | 6 ++ system/src/CsrfToken.php | 95 +++++++++++++++++++ .../templates/account.back_button.html.twig | 1 + .../account.change_comment.html.twig | 2 + .../templates/account.change_info.html.twig | 4 +- .../templates/account.change_mail.html.twig | 2 + .../templates/account.change_name.html.twig | 2 + .../account.change_password.html.twig | 4 +- system/templates/account.change_sex.html.twig | 2 + system/templates/account.create.html.twig | 1 + .../account.create_character.html.twig | 2 + .../account.delete_character.html.twig | 4 +- ...ccount.generate_new_recovery_key.html.twig | 2 + .../account.generate_recovery_key.html.twig | 4 +- system/templates/account.login.html.twig | 4 +- system/templates/account.lost.form.html.twig | 5 +- system/templates/account.management.html.twig | 8 ++ .../templates/admin.changelog.form.html.twig | 1 + system/templates/admin.login.html.twig | 1 + system/templates/admin.mailer.html.twig | 1 + system/templates/admin.menus.form.html.twig | 1 + system/templates/admin.news.form.html.twig | 1 + system/templates/admin.notepad.html.twig | 1 + system/templates/admin.pages.form.html.twig | 1 + system/templates/admin.plugins.form.html.twig | 1 + system/templates/admin.settings.html.twig | 6 ++ .../templates/admin.tools.account.html.twig | 3 + system/templates/characters.html.twig | 4 +- system/templates/faq.form.html.twig | 9 +- system/templates/forum.add_board.html.twig | 3 +- system/templates/forum.edit_post.html.twig | 3 +- system/templates/forum.move_thread.html.twig | 3 +- system/templates/forum.new_post.html.twig | 1 + system/templates/forum.new_thread.html.twig | 3 +- system/templates/gallery.form.html.twig | 3 +- .../templates/guilds.accept_invite.html.twig | 4 +- system/templates/guilds.back_button.html.twig | 3 +- .../guilds.change_description.html.twig | 2 + system/templates/guilds.change_logo.html.twig | 2 + system/templates/guilds.change_motd.html.twig | 2 + system/templates/guilds.change_rank.html.twig | 4 +- system/templates/guilds.create.html.twig | 4 +- .../templates/guilds.create.success.html.twig | 3 +- .../templates/guilds.delete_guild.html.twig | 4 +- .../templates/guilds.delete_invite.html.twig | 4 +- system/templates/guilds.invite.html.twig | 3 +- system/templates/guilds.kick_player.html.twig | 4 +- system/templates/guilds.leave_guild.html.twig | 4 +- system/templates/guilds.list.html.twig | 12 ++- system/templates/guilds.manager.html.twig | 5 +- .../guilds.pass_leadership.html.twig | 4 +- system/templates/guilds.view.html.twig | 7 ++ system/templates/templates.header.html.twig | 2 + system/twig.php | 11 +++ 72 files changed, 332 insertions(+), 39 deletions(-) create mode 100644 system/src/CsrfToken.php diff --git a/admin/pages/accounts.php b/admin/pages/accounts.php index f3022e9c..1b440761 100644 --- a/admin/pages/accounts.php +++ b/admin/pages/accounts.php @@ -13,6 +13,9 @@ use MyAAC\Models\Player; defined('MYAAC') or die('Direct access not allowed!'); $title = 'Account editor'; + +csrfProtect(); + $admin_base = ADMIN_URL . '?p=accounts'; $use_datatable = true; @@ -289,6 +292,7 @@ else if (isset($_REQUEST['search'])) {
+
@@ -581,6 +585,7 @@ else if (isset($_REQUEST['search'])) {
+
@@ -590,6 +595,7 @@ else if (isset($_REQUEST['search'])) {
+
diff --git a/admin/pages/changelog.php b/admin/pages/changelog.php index 3d5cad64..34e7c01a 100644 --- a/admin/pages/changelog.php +++ b/admin/pages/changelog.php @@ -13,12 +13,15 @@ use MyAAC\Models\Changelog as ModelsChangelog; defined('MYAAC') or die('Direct access not allowed!'); +$title = 'Changelog'; + +csrfProtect(); + if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) { echo 'Access denied.'; return; } -$title = 'Changelog'; $use_datatable = true; const CL_LIMIT = 600; // maximum changelog body length ?> diff --git a/admin/pages/dashboard.php b/admin/pages/dashboard.php index e24b98ad..a8a15e4c 100644 --- a/admin/pages/dashboard.php +++ b/admin/pages/dashboard.php @@ -10,6 +10,8 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Dashboard'; +csrfProtect(); + if (isset($_GET['clear_cache'])) { if (clearCache()) { success('Cache cleared.'); diff --git a/admin/pages/login.php b/admin/pages/login.php index 8bb25f36..eb6466d3 100644 --- a/admin/pages/login.php +++ b/admin/pages/login.php @@ -10,6 +10,8 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Login'; +csrfProtect(); + require PAGES . 'account/login.php'; if ($logged) { header('Location: ' . (admin() ? ADMIN_URL : BASE_URL)); diff --git a/admin/pages/mailer.php b/admin/pages/mailer.php index 732b7461..cf8ef241 100644 --- a/admin/pages/mailer.php +++ b/admin/pages/mailer.php @@ -10,6 +10,8 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Mailer'; +csrfProtect(); + if (!hasFlag(FLAG_CONTENT_MAILER) && !superAdmin()) { echo 'Access denied.'; return; diff --git a/admin/pages/mass_account.php b/admin/pages/mass_account.php index 63bec54c..549310a5 100644 --- a/admin/pages/mass_account.php +++ b/admin/pages/mass_account.php @@ -16,6 +16,8 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Mass Account Actions'; +csrfProtect(); + $hasCoinsColumn = $db->hasColumn('accounts', 'coins'); $hasPointsColumn = $db->hasColumn('accounts', 'premium_points'); $freePremium = $config['lua']['freePremium']; diff --git a/admin/pages/mass_teleport.php b/admin/pages/mass_teleport.php index 5027fa1c..f2a7ee27 100644 --- a/admin/pages/mass_teleport.php +++ b/admin/pages/mass_teleport.php @@ -16,6 +16,8 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Mass Teleport Actions'; +csrfProtect(); + function admin_teleport_position($x, $y, $z) { if (!Player::query()->update([ 'posx' => $x, 'posy' => $y, 'posz' => $z diff --git a/admin/pages/menus.php b/admin/pages/menus.php index a0b492df..a6b06773 100644 --- a/admin/pages/menus.php +++ b/admin/pages/menus.php @@ -13,6 +13,8 @@ use MyAAC\Models\Menu; defined('MYAAC') or die('Direct access not allowed!'); $title = 'Menus'; +csrfProtect(); + if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) { echo 'Access denied.'; return; @@ -93,6 +95,7 @@ if (isset($_REQUEST['template'])) {

+ @@ -112,6 +115,7 @@ if (isset($_REQUEST['template'])) { $last_id = array(); ?>