Below is a differential between the unpatched vulnerable code and the patched update, for reference.
--- a/school-management-system/admin/inc/manager/WLSM_Class.php
+++ b/school-management-system/admin/inc/manager/WLSM_Class.php
@@ -12,6 +12,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
global $wpdb;
$page_url = WLSM_M_Class::get_page_url();
@@ -40,7 +44,7 @@
// $columns = array('c.label');
// if (esc_sql($_POST['order']) && esc_sql($columns[$_POST['order']['0']['column']])) {
// $order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- // $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ // $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
// $query_filter .= $wpdb->prepare(' ORDER BY %s %s', $order_by, $order_dir);
// } else {
@@ -52,7 +56,7 @@
if (isset($_POST['order']) && isset($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= $wpdb->prepare(' ORDER BY %s %s', $order_by, $order_dir);
} else {
--- a/school-management-system/admin/inc/manager/WLSM_School.php
+++ b/school-management-system/admin/inc/manager/WLSM_School.php
@@ -158,7 +158,7 @@
$columns = array( 'c.label' );
if ( esc_sql( isset( $_POST['order'] ) ) && esc_sql( $columns[ $_POST['order']['0']['column'] ] ) ) {
$order_by = sanitize_text_field( esc_sql($columns[ $_POST['order']['0']['column'] ]) );
- $order_dir = sanitize_text_field( esc_sql($_POST['order']['0']['dir']) );
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= $wpdb->prepare( ' ORDER BY %s %s', $order_by, $order_dir );
} else {
@@ -444,7 +444,7 @@
$columns = array( 'a.name', 'u.user_login', 'u.user_email', 'a.assigned_by_manager' );
if ( esc_sql( $_POST['order'] ) && esc_sql( $columns[ $_POST['order']['0']['column'] ] ) ) {
$order_by = sanitize_text_field( esc_sql($columns[ $_POST['order']['0']['column'] ]) );
- $order_dir = sanitize_text_field( esc_sql($_POST['order']['0']['dir']) );
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= $wpdb->prepare( ' ORDER BY %s %s', $order_by, $order_dir );
} else {
--- a/school-management-system/admin/inc/manager/WLSM_Session.php
+++ b/school-management-system/admin/inc/manager/WLSM_Session.php
@@ -10,6 +10,10 @@
if ( ! current_user_can( WLSM_ADMIN_CAPABILITY ) ) {
die();
}
+
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
global $wpdb;
@@ -79,7 +83,7 @@
$columns = array( 'ss.label', 'ss.start_date', 'ss.end_date' );
if ( esc_sql( isset( $_POST['order'] ) ) && esc_sql( $columns[ $_POST['order']['0']['column'] ] ) ) {
$order_by = sanitize_text_field( esc_sql( $columns[ $_POST['order']['0']['column'] ]) );
- $order_dir = sanitize_text_field( esc_sql($_POST['order']['0']['dir']) );
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= $wpdb->prepare( ' ORDER BY %s %s', $order_by, $order_dir );
} else {
--- a/school-management-system/admin/inc/school/staff/accountant/WLSM_Staff_Accountant.php
+++ b/school-management-system/admin/inc/school/staff/accountant/WLSM_Staff_Accountant.php
@@ -215,7 +215,7 @@
$columns = array('sr.name', 'sr.admission_number', 'i.invoice_number', 'i.label', 'payable', 'paid', 'due', 'i.status', 'i.date_issued', 'i.due_date', 'sr.phone', 'c.label', 'se.label', 'sr.enrollment_number');
if (isset($_POST['order']) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -863,7 +863,7 @@
$columns = array('p.receipt_number', 'p.amount', 'p.payment_method', 'p.transaction_id', 'p.created_at', 'p.note');
if (isset($_POST['order']) && esc_sql($_POST['order']) && isset($columns[$_POST['order']['0']['column']]) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
// Validate order direction
$order_dir = in_array(strtoupper($order_dir), array('ASC', 'DESC')) ? strtoupper($order_dir) : 'DESC';
@@ -1192,6 +1192,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
$current_school = $current_user['school'];
$can_delete_payments = WLSM_M_Role::check_permission(array('delete_payments'), $current_school['permissions']);
@@ -1289,7 +1293,7 @@
$columns = array('p.receipt_number', 'p.amount', 'p.payment_method', 'p.transaction_id', 'p.created_at', 'p.note', 'i.label', 'sr.name', 'sr.admission_number', 'c.label', 'se.label', 'sr.enrollment_number', 'sr.phone', 'sr.father_name', 'sr.father_phone');
if (isset($_POST['order']) && esc_sql($_POST['order']) && isset($columns[$_POST['order']['0']['column']]) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
--- a/school-management-system/admin/inc/school/staff/class/WLSM_Staff_Class.php
+++ b/school-management-system/admin/inc/school/staff/class/WLSM_Staff_Class.php
@@ -16,6 +16,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
$school_id = $current_user['school']['id'];
$session_id = $current_user['session']['ID'];
@@ -46,7 +50,7 @@
$columns = array('c.label', 'sections_count', 'students_count');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -157,7 +161,7 @@
$columns = array('se.label', 'students_count');
if (isset($_POST['order']) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -468,6 +472,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
$school_id = $current_user['school']['id'];
global $wpdb;
@@ -555,7 +563,7 @@
$columns = array('n.title', 'n.link_to', 'n.is_active', 'n.created_at', 'u.user_login');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -845,6 +853,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
$school_id = $current_user['school']['id'];
global $wpdb;
@@ -887,7 +899,7 @@
$columns = array('sj.label', 'sj.code', 'sj.type', 'c.label', 'admins_count');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -1232,7 +1244,7 @@
$columns = array('a.name', 'a.phone', 'u.user_login', 'a.is_active');
if (esc_sql($_POST['order']) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
--- a/school-management-system/admin/inc/school/staff/general/WLSM_Staff_General.php
+++ b/school-management-system/admin/inc/school/staff/general/WLSM_Staff_General.php
@@ -771,7 +771,7 @@
$columns = array('sr.name', 'sr.admission_number', 'sr.phone', 'sr.email', 'c.label', 'se.label', 'sr.roll_number', 'sr.father_name', 'sr.father_phone', 'u.user_email', 'u.user_login', 'sr.admission_date', 'sr.enrollment_number', 'sr.is_active');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -1245,6 +1245,9 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
$school_id = $current_user['school']['id'];
$session_id = $current_user['session']['ID'];
@@ -1340,7 +1343,7 @@
$columns = array('a.name', 'a.phone', 'a.email', 'a.salary', 'a.designation', 'r.name', 'u.user_email', 'u.user_login', 'a.joining_date', 'a.is_active');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
@@ -1854,6 +1857,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
$school_id = $current_user['school']['id'];
global $wpdb;
@@ -1889,7 +1896,7 @@
$columns = array('r.name');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= $wpdb->prepare(' ORDER BY %s %s', $order_by, $order_dir);
} else {
@@ -2192,6 +2199,10 @@
die();
}
+ if ( ! wp_verify_nonce( isset( $_POST['nonce'] ) ? $_POST['nonce'] : '', 'wlsm-security' ) ) {
+ die();
+ }
+
$school_id = $current_user['school']['id'];
global $wpdb;
@@ -2328,7 +2339,7 @@
$columns = array('c.label', 'iq.name', 'iq.phone', 'iq.email', 'iq.message', 'iq.created_at', 'iq.next_follow_up', 'iq.is_active');
if (esc_sql(isset($_POST['order'])) && esc_sql($columns[$_POST['order']['0']['column']])) {
$order_by = sanitize_text_field(esc_sql($columns[$_POST['order']['0']['column']]));
- $order_dir = sanitize_text_field(esc_sql($_POST['order']['0']['dir']));
+ $order_dir = ( strtoupper( sanitize_text_field( $_POST['order']['0']['dir'] ) ) === 'ASC' ) ? 'ASC' : 'DESC';
$query_filter .= ' ORDER BY ' . $order_by . ' ' . $order_dir;
} else {
--- a/school-management-system/school-management-system.php
+++ b/school-management-system/school-management-system.php
@@ -3,7 +3,7 @@
* Plugin Name: The School Management - Education & Learning ERP
* Plugin URI: https://wordpress.org/plugins/school-management-system/
* Description: The School Management System is a WordPress plugin to manage school related entities such as classes, sections, students, ID cards, teachers, staff, fees, invoices, noticeboard and much more. Its completely solutions for school management.
- * Version: 5.4
+ * Version: 5.5
* Requires at least: 6.2
* Author: Weblizar
* Author URI: https://weblizar.com