--- a/court-reservation/admin/class-courtres-admin.php
+++ b/court-reservation/admin/class-courtres-admin.php
@@ -175,6 +175,11 @@
return $this->handleError( __( 'No permission.', 'court-reservation' ) );
}
+ // CSRF verification
+ if ( ! isset( $_REQUEST['courtres_add_reservation_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['courtres_add_reservation_nonce'] ) ), 'courtres_add_reservation' ) ) {
+ return $this->handleError( __( 'Security check failed.', 'court-reservation' ) );
+ }
+
if ( isset( $_REQUEST['delete'] ) && isset( $_REQUEST['id'] ) ) { // delete reservation
$reservation = $this->getReservationByID( sanitize_text_field( $_REQUEST['id'] ) );
if ( $reservation == null || $reservation->userid != wp_get_current_user()->ID ) {
--- a/court-reservation/admin/partials/courtres-challenges.php
+++ b/court-reservation/admin/partials/courtres-challenges.php
@@ -31,6 +31,16 @@
// deleting the challenge
if ( isset( $_POST['id'] ) && isset( $_POST['delete'] ) ) {
+ if ( ! isset( $_POST['courtres_delete_challenge_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_challenge_nonce'] ) ), 'courtres_delete_challenge' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$challenge_class = new Courtres_Entity_Challenges( intval( $_POST['id'] ) );
// first delete linked challenge event
global $wpdb;
@@ -72,7 +82,7 @@
$challenge = array_intersect_key( $challenge, $columns );
- $challenge['action'] = ( $challenge['status'] == 'accepted' || $challenge['status'] == 'scheduled' ) ? sprintf( '<form method="POST"><input type="hidden" name="id" value="%d"><input class="button" type="submit" name="delete" value="%s"></form>', $challenge['id'], __( 'Delete', 'court-reservation' ) ) : false; // Added delete action to accepted challenges only
+ $challenge['action'] = ( $challenge['status'] == 'accepted' || $challenge['status'] == 'scheduled' ) ? sprintf( '<form method="POST">%s<input type="hidden" name="id" value="%d"><input class="button" type="submit" name="delete" value="%s"></form>', wp_nonce_field( 'courtres_delete_challenge', 'courtres_delete_challenge_nonce', false ), $challenge['id'], __( 'Delete', 'court-reservation' ) ) : false; // Added delete action to accepted challenges only
}
$challengesListTable = new Courtres_Base_List_Table();
--- a/court-reservation/admin/partials/courtres-court.php
+++ b/court-reservation/admin/partials/courtres-court.php
@@ -61,10 +61,30 @@
}
if ( isset( $_POST['delete'] ) && isset( $_POST['id'] ) && (int) $_POST['id'] > 0 ) { // delete
+ if ( ! isset( $_POST['courtres_court_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_court_nonce'] ) ), 'courtres_court' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$wpdb->delete( $table_name, array( 'id' => (int) $_POST['id'] ) );
}
if ( isset( $_POST['submit'] ) ) {
+ if ( ! isset( $_POST['courtres_court_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_court_nonce'] ) ), 'courtres_court' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
if ( isset( $_POST['id'] ) && (int) $_POST['id'] > 0 ) { // edit
$wpdb->update(
$table_name,
@@ -280,6 +300,7 @@
<hr class="wp-header-end">
<form method="post">
+ <?php wp_nonce_field( 'courtres_court', 'courtres_court_nonce' ); ?>
<input type="hidden" name="id" value="<?php echo esc_html( $court->id ); ?>" />
<table>
<tr>
--- a/court-reservation/admin/partials/courtres-emailtemplate.php
+++ b/court-reservation/admin/partials/courtres-emailtemplate.php
@@ -22,6 +22,16 @@
$table_name = $this->getTable( 'settings' );
if ( isset( $_POST['submit'] ) ) {
+ if ( ! isset( $_POST['courtres_email_template_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_email_template_nonce'] ) ), 'courtres_email_template' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
if ( isset( $_POST['email_notify_players'] ) ) {
// Checkbox is selected
@@ -480,7 +490,7 @@
</h2>
<form method="post">
-
+ <?php wp_nonce_field( 'courtres_email_template', 'courtres_email_template_nonce' ); ?>
<input type="hidden" name="option_email_id" value="<?php echo esc_attr( $option_email->option_id ); ?>" />
<input type="hidden" name="option_email_template_id" value="<?php echo wp_kses_post( $option_email_template->option_id ); ?>" />
<input type="hidden" name="option_email_1_id" value="<?php echo esc_attr( $option_email_1->option_id ); ?>" />
--- a/court-reservation/admin/partials/courtres-event.php
+++ b/court-reservation/admin/partials/courtres-event.php
@@ -78,6 +78,16 @@
}
if ( isset( $_POST['delete'] ) && isset( $_POST['id'] ) && (int) $_POST['id'] > 0 ) { // delete
+ if ( ! isset( $_POST['courtres_event_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_event_nonce'] ) ), 'courtres_event' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$res = $wpdb->delete( $table_name, array( 'id' => (int) $_POST['id'] ) );
if ( $res ) {
$is_deleted = true;
@@ -114,6 +124,16 @@
// submitted form >
if ( isset( $_POST['submit'] ) ) {
+ if ( ! isset( $_POST['courtres_event_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_event_nonce'] ) ), 'courtres_event' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
// declare vars
$is_insert_update = true;
$event_timestamp = $event_date ? strtotime( $event_date ) : false;
@@ -299,6 +319,7 @@
<?php if ( $event->type != 'challenge' && ! $is_created && ! $is_deleted ) : ?>
<form method="post">
+ <?php wp_nonce_field( 'courtres_event', 'courtres_event_nonce' ); ?>
<input type="hidden" name="id" value="<?php echo esc_attr( $event->id ); ?>" />
<table class="t-form">
<tr>
--- a/court-reservation/admin/partials/courtres-events.php
+++ b/court-reservation/admin/partials/courtres-events.php
@@ -15,7 +15,17 @@
<?php
-if (isset($_POST['delete_all_events']) && $_POST['delete_all_events'] == 1) {
+if ( isset( $_POST['delete_all_events'] ) && $_POST['delete_all_events'] == 1 ) {
+ if ( ! isset( $_POST['courtres_delete_all_events_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_all_events_nonce'] ) ), 'courtres_delete_all_events' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$this->delete_all_events();
}
@@ -79,6 +89,7 @@
<div class="cr-head-right">
<form id="delete_events" method="post" action="<?php echo esc_url(admin_url( 'admin.php?page=courtres-events' )); ?>">
+ <?php wp_nonce_field( 'courtres_delete_all_events', 'courtres_delete_all_events_nonce' ); ?>
<input type="hidden" name="delete_all_events" value="1" />
<p class="submit">
<button type="button" class="button button-primary" onclick="deleteEvents();"><?php echo esc_html__( 'Delete all events', 'court-reservation' ); ?></button>
--- a/court-reservation/admin/partials/courtres-reservations.php
+++ b/court-reservation/admin/partials/courtres-reservations.php
@@ -15,7 +15,17 @@
<?php
-if (isset($_POST['delete_expired_reservations']) && $_POST['delete_expired_reservations'] == 1) {
+if ( isset( $_POST['delete_expired_reservations'] ) && $_POST['delete_expired_reservations'] == 1 ) {
+ if ( ! isset( $_POST['courtres_delete_expired_reservations_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_expired_reservations_nonce'] ) ), 'courtres_delete_expired_reservations' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$this->delete_expired_reservations();
}
@@ -23,6 +33,16 @@
wp_die();
}
if ( isset( $_POST['id'] ) && isset( $_POST['delete'] ) ) {
+ if ( ! isset( $_POST['courtres_delete_reservation_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_reservation_nonce'] ) ), 'courtres_delete_reservation' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$this->deleteReservationByID( sanitize_text_field( $_POST['id'] ) );
}
?>
@@ -63,6 +83,7 @@
<div class="cr-head-right">
<form id="delete_expired_reservations" method="post" action="<?php echo esc_url(admin_url( 'admin.php?page=courtres-reservations' )); ?>">
+ <?php wp_nonce_field( 'courtres_delete_expired_reservations', 'courtres_delete_expired_reservations_nonce' ); ?>
<input type="hidden" name="delete_expired_reservations" value="1" />
<p class="submit">
<button type="button" class="button button-primary" onclick="deleteExpiredReservations();"><?php echo esc_html__( 'Delete expired', 'court-reservation' ); ?></button>
@@ -156,6 +177,7 @@
</td>
<td>
<form method="POST">
+ <?php wp_nonce_field( 'courtres_delete_reservation', 'courtres_delete_reservation_nonce' ); ?>
<input type="hidden" name="id" value="<?php echo esc_attr( $item->id ); ?>"/>
<input class="button" type="submit" name="delete" value="<?php echo esc_attr__( 'Delete', 'court-reservation' ); ?>"/>
</form>
--- a/court-reservation/admin/partials/courtres-settings.php
+++ b/court-reservation/admin/partials/courtres-settings.php
@@ -21,8 +21,17 @@
global $wpdb;
$table_name = $this->getTable( 'settings' );
-if ( isset( $_POST['delete_all_events'] ) && $_POST['delete_all_events'] == "delete")
-{
+if ( isset( $_POST['delete_all_events'] ) && $_POST['delete_all_events'] == "delete" ) {
+ if ( ! isset( $_POST['courtres_delete_all_events_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_all_events_nonce'] ) ), 'courtres_delete_all_events' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
// $wpdb->query( "DELETE FROM {$this->getTable('reserv_players')} WHERE `reservation_gid` = '$gid'" );
$wpdb->query( "TRUNCATE `wp_courtres_events`" );
$wpdb->query( "TRUNCATE `wp_courtres_reserv_players`" );
@@ -30,6 +39,16 @@
}
if ( isset( $_POST['submit'] ) ) {
+ if ( ! isset( $_POST['courtres_delete_all_events_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_delete_all_events_nonce'] ) ), 'courtres_delete_all_events' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
//echo "<pre>"; print_r($_POST); die;
$email_notify_players = '1';
@@ -675,6 +694,7 @@
</h2>
<form method="post">
+ <?php wp_nonce_field( 'courtres_delete_all_events', 'courtres_delete_all_events_nonce' ); ?>
<input type="hidden" name="option_email_id" value="<?php echo esc_attr( $option_email->option_id ); ?>" />
<input type="hidden" name="option_max_h_id" value="<?php echo esc_attr( $option_max_h->option_id ); ?>" />
<input type="hidden" name="option_half_hour_id" value="<?php echo esc_attr( $option_half_hour->option_id ); ?>" />
--- a/court-reservation/admin/partials/courtres-ui.php
+++ b/court-reservation/admin/partials/courtres-ui.php
@@ -22,6 +22,16 @@
$table_name = $this->getTable( 'settings' );
if ( isset( $_POST['submit'] ) ) {
+ if ( ! isset( $_POST['courtres_ui_settings_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['courtres_ui_settings_nonce'] ) ), 'courtres_ui_settings' ) ) {
+ wp_die(
+ esc_html__( 'Security check failed. Please try again.', 'court-reservation' ),
+ esc_html__( 'Error', 'court-reservation' ),
+ array(
+ 'response' => 403,
+ 'back_link' => true,
+ )
+ );
+ }
$option_ui_link = '0';
if ( isset( $_POST['option_ui_link'] ) ) {
// Checkbox is selected
@@ -556,6 +566,7 @@
</h2>
<form method="post">
+ <?php wp_nonce_field( 'courtres_ui_settings', 'courtres_ui_settings_nonce' ); ?>
<input type="hidden" name="option_ui_tbl_brdr_clr_id" value="<?php echo esc_attr( $option_ui_tbl_brdr_clr->option_id ); ?>" />
<input type="hidden" name="option_ui_tbl_bg_clr_1_id" value="<?php echo esc_attr( $option_ui_tbl_bg_clr_1->option_id ); ?>" />
<input type="hidden" name="option_ui_tbl_bg_clr_2_id" value="<?php echo esc_attr( $option_ui_tbl_bg_clr_2->option_id ); ?>" />
--- a/court-reservation/courtres.php
+++ b/court-reservation/courtres.php
@@ -16,7 +16,7 @@
* Plugin Name: Court Reservation
* Plugin URI: https://www.courtreservation.io
* Description: Reservation system for tennis, squash and badminton
- * Version: 1.10.8
+ * Version: 1.10.9
* Author: Webmühle e.U.
* Author URI: https://www.webmuehle.at
* License: GPL-2.0+
@@ -120,7 +120,7 @@
* Start at version 1.0.4 and use SemVer - https://semver.org
* Rename this for your plugin and update it as you release new versions.
*/
-define( 'Court_Reservation', '1.10.8' );
+define( 'Court_Reservation', '1.10.9' );
require_once plugin_dir_path( __FILE__ ) . 'functions.php';
--- a/court-reservation/public/partials/courtres-public-display-full-view.php
+++ b/court-reservation/public/partials/courtres-public-display-full-view.php
@@ -173,6 +173,7 @@
<div id="cr-dialog-reserve-<?php echo esc_attr( $courtID ); ?>" style="display:none;" class="cr-dialog-reserve" title="<?php echo esc_attr( $court->name ); ?> <?php echo esc_html__( 'Reservation', 'court-reservation' ); ?>">
<form id="cr-form-reserve-<?php echo esc_attr( $courtID ); ?>" class="resform" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post" >
+ <?php wp_nonce_field( 'courtres_add_reservation', 'courtres_add_reservation_nonce' ); ?>
<input type="hidden" name="action" value="add_reservation">
<input type="hidden" name="courtid" value="<?php echo esc_attr( $court->id ); ?>" />
<input type="hidden" name="maxhours" value="<?php echo esc_attr( $maxhours ); ?>" />
--- a/court-reservation/public/partials/courtres-public-display.php
+++ b/court-reservation/public/partials/courtres-public-display.php
@@ -89,6 +89,7 @@
<!-- CR-DIALOG-RESERVE -->
<div id="cr-dialog-reserve-<?php echo esc_attr( $courtID ); ?>" class="cr-dialog-reserve" title="<?php echo esc_attr( $court->name ); ?> <?php echo esc_html__( 'Reservation', 'court-reservation' ); ?>" style="display:none;">
<form id="cr-form-reserve-<?php echo esc_attr( $courtID ); ?>" class="resform" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post" >
+ <?php wp_nonce_field( 'courtres_add_reservation', 'courtres_add_reservation_nonce' ); ?>
<input type="hidden" name="action" value="add_reservation">
<input type="hidden" name="courtid" value="<?php echo esc_attr( $court->id ); ?>" />
<input type="hidden" name="maxhours" value="<?php echo esc_attr( $maxhours ); ?>" />