Skip to content

Commit 23c1127

Browse files
authored
UR-4683 Fix - Prevent arbitrary shortcode execution through user-controlled smart tags (display name, full name, username, all fields) in Content Restriction messages. (#1342)
* fix(security): strip shortcodes from user-controlled smart tag values to prevent arbitrary shortcode execution (UR-4683) * fix(security): strip shortcodes from author_name, first_name and last_name smart tags to prevent arbitrary shortcode execution (UR-4683)
1 parent d6a3711 commit 23c1127

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

includes/class-ur-smart-tags.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,8 @@ function ( &$value ) {
272272
} else {
273273
$name = isset( $values['username'] ) ? $values['username'] : '';
274274
}
275-
$content = str_replace( '{{' . $other_tag . '}}', $name, $content );
275+
$name = strip_shortcodes( $name );
276+
$content = str_replace( '{{' . $other_tag . '}}', esc_html( $name ), $content );
276277
break;
277278

278279
case 'ur_login':
@@ -381,7 +382,8 @@ function ( &$value ) {
381382
$all_fields = '';
382383
}
383384

384-
$content = str_replace( '{{' . $other_tag . '}}', $all_fields, $content );
385+
$all_fields = strip_shortcodes( $all_fields );
386+
$content = str_replace( '{{' . $other_tag . '}}', $all_fields, $content );
385387
break;
386388

387389
case 'admin_email':
@@ -503,6 +505,7 @@ function ( &$value ) {
503505

504506
case 'author_name':
505507
$author = get_the_author_meta( 'display_name' );
508+
$author = strip_shortcodes( $author );
506509
$content = str_replace( '{{' . $other_tag . '}}', sanitize_text_field( $author ), $content );
507510
break;
508511
case 'unique_id':
@@ -579,6 +582,7 @@ function ( &$value ) {
579582
$user_id = ! empty( $values['user_id'] ) ? $values['user_id'] : get_current_user_id();
580583
$user_obj = get_userdata( $user_id );
581584
$display_name = isset( $user_obj->display_name ) ? $user_obj->display_name : '';
585+
$display_name = strip_shortcodes( $display_name );
582586
$content = str_replace( '{{' . $tag . '}}', esc_html( $display_name ), $content );
583587
break;
584588

@@ -603,7 +607,8 @@ function ( &$value ) {
603607
$userdata = get_userdata( get_current_user_id() );
604608
$full_name = isset( $userdata->display_name ) ? $userdata->display_name : '';
605609
}
606-
$content = str_replace( '{{' . $tag . '}}', esc_html( $full_name ), $content );
610+
$full_name = strip_shortcodes( $full_name );
611+
$content = str_replace( '{{' . $tag . '}}', esc_html( $full_name ), $content );
607612
break;
608613
case 'profile_details_link':
609614
$endpoint = ur_string_translation( 0, 'user_registration_edit-profile_slug', 'edit-profile' );
@@ -842,21 +847,24 @@ function ( &$value ) {
842847
$user = get_user_by( 'login', $username );
843848
$user_id = isset( $user->ID ) ? $user->ID : 0;
844849
$first_name = get_user_meta( $user_id, 'first_name', true );
845-
$content = str_replace( '{{' . $other_tag . '}}', $first_name, $content );
850+
$first_name = strip_shortcodes( $first_name );
851+
$content = str_replace( '{{' . $other_tag . '}}', esc_html( $first_name ), $content );
846852
break;
847853
case 'first_name':
848854
$username = $values['username'] ?? $values['membership_tags']['username'] ?? null;
849855
$user = get_user_by( 'login', $username );
850856
$user_id = isset( $user->ID ) ? $user->ID : get_current_user_id();
851857
$first_name = get_user_meta( $user_id, 'first_name', true );
852-
$content = str_replace( '{{' . $other_tag . '}}', $first_name, $content );
858+
$first_name = strip_shortcodes( $first_name );
859+
$content = str_replace( '{{' . $other_tag . '}}', esc_html( $first_name ), $content );
853860
break;
854861
case 'last_name':
855862
$username = $values['username'] ?? $values['membership_tags']['username'] ?? null;
856863
$user = get_user_by( 'login', $username );
857864
$user_id = isset( $user->ID ) ? $user->ID : get_current_user_id();
858865
$last_name = get_user_meta( $user_id, 'last_name', true );
859-
$content = str_replace( '{{' . $other_tag . '}}', $last_name, $content );
866+
$last_name = strip_shortcodes( $last_name );
867+
$content = str_replace( '{{' . $other_tag . '}}', esc_html( $last_name ), $content );
860868
break;
861869
case 'membership_end_date':
862870
$membership_end_date = ( isset( $values['membership_tags'] ) && isset( $values['membership_tags']['membership_plan_expiry_date'] ) ) ? $values['membership_tags']['membership_plan_expiry_date'] : '';

0 commit comments

Comments
 (0)