Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
03/08/2017 09:57:35 PM (7 years ago)
Author:
johnjamesjacoby
Message:

Nonce protection for XProfile group & field actions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-xprofile/bp-xprofile-admin.php

    r11432 r11468  
    4141function xprofile_admin( $message = '', $type = 'error' ) {
    4242
    43     if ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && 'add_field' == $_GET['mode'] ) {
    44         xprofile_admin_manage_field( $_GET['group_id'] );
    45 
    46     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && isset( $_GET['field_id'] ) && 'edit_field' == $_GET['mode'] ) {
    47         xprofile_admin_manage_field( $_GET['group_id'], $_GET['field_id'] );
    48 
    49     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['field_id'] ) && 'delete_field' == $_GET['mode'] ) {
    50         xprofile_admin_delete_field( $_GET['field_id'], 'field');
    51 
    52     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['option_id'] ) && 'delete_option' == $_GET['mode'] ) {
    53         xprofile_admin_delete_field( $_GET['option_id'], 'option' );
    54 
    55     } elseif ( isset( $_GET['mode'] ) && 'add_group' == $_GET['mode'] ) {
    56         xprofile_admin_manage_group();
    57 
    58     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && 'delete_group' == $_GET['mode'] ) {
    59         xprofile_admin_delete_group( $_GET['group_id'] );
    60 
    61     } elseif ( isset( $_GET['mode'] ) && isset( $_GET['group_id'] ) && 'edit_group' == $_GET['mode'] ) {
    62         xprofile_admin_manage_group( $_GET['group_id'] );
     43    // What mode?
     44    $mode = ! empty( $_GET['mode'] )
     45        ? sanitize_key( $_GET['mode'] )
     46        : false;
     47
     48    // Group ID
     49    $group_id = ! empty( $_GET['group_id'] )
     50        ? intval( $_GET['group_id'] )
     51        : false;
     52
     53    // Field ID
     54    $field_id = ! empty( $_GET['field_id'] )
     55        ? intval( $_GET['field_id'] )
     56        : false;
     57
     58    // Option ID
     59    $option_id = ! empty( $_GET['option_id'] )
     60        ? intval( $_GET['option_id'] )
     61        : false;
     62
     63    // Allowed modes
     64    $allowed_modes = array(
     65        'add_group',
     66        'edit_group',
     67        'delete_group',
     68        'add_field',
     69        'edit_field',
     70        'delete_field',
     71        'delete_option'
     72    );
     73
     74    // Is an allowed mode
     75    if ( in_array( $mode, $allowed_modes, true ) ) {
     76
     77        // All group actions
     78        if ( false !== $group_id ) {
     79
     80            // Add field to group
     81            if ( 'add_field' == $mode ) {
     82                xprofile_admin_manage_field( $group_id );
     83
     84            // Edit field of group
     85            } elseif ( ! empty( $field_id ) && 'edit_field' === $mode ) {
     86                xprofile_admin_manage_field( $group_id, $field_id );
     87
     88            // Delete group
     89            } elseif ( 'delete_group' === $mode ) {
     90                xprofile_admin_delete_group( $group_id );
     91
     92            // Edit group
     93            } elseif ( 'edit_group' === $mode ) {
     94                xprofile_admin_manage_group( $group_id );
     95            }
     96
     97        // Delete field
     98        } elseif ( ( false !== $field_id ) && ( 'delete_field' === $mode ) ) {
     99            xprofile_admin_delete_field( $field_id, 'field');
     100
     101        // Delete option
     102        } elseif ( ! empty( $option_id ) && 'delete_option' === $mode ) {
     103            xprofile_admin_delete_field( $option_id, 'option' );
     104
     105        // Add group
     106        } elseif ( 'add_group' == $mode ) {
     107            xprofile_admin_manage_group();
     108        }
    63109
    64110    } else {
     
    101147            wp_nonce_field( 'bp_reorder_groups', '_wpnonce_reorder_groups', false );
    102148
    103             if ( !empty( $message ) ) :
     149            if ( ! empty( $message ) ) :
    104150                $type = ( $type == 'error' ) ? 'error' : 'updated'; ?>
    105151
     
    254300    if ( isset( $_POST['save_group'] ) ) {
    255301
     302        // Check nonce
     303        check_admin_referer( 'bp_xprofile_admin_group', 'bp_xprofile_admin_group' );
     304
    256305        // Validate $_POSTed data.
    257306        if ( BP_XProfile_Group::admin_validate() ) {
     
    292341            }
    293342
    294             unset( $_GET['mode'] );
    295             xprofile_admin( $message, $type );
     343            xprofile_admin_screen( $message, $type );
    296344
    297345        } else {
     
    332380    }
    333381
    334     unset( $_GET['mode'] );
    335     xprofile_admin( $message, $type );
     382    xprofile_admin_screen( $message, $type );
    336383}
    337384
     
    358405
    359406    if ( isset( $_POST['saveField'] ) ) {
     407
     408        // Check nonce
     409        check_admin_referer( 'bp_xprofile_admin_field', 'bp_xprofile_admin_field' );
     410
    360411        if ( BP_XProfile_Field::admin_validate() ) {
    361412            $field->is_required = $_POST['required'];
     
    446497            }
    447498
    448             unset( $_GET['mode'] );
    449 
    450             xprofile_admin( $message, $type );
     499            xprofile_admin_screen( $message, $type );
    451500
    452501        } else {
     
    495544    }
    496545
    497     unset( $_GET['mode'] );
    498     xprofile_admin( $message, $type );
     546    xprofile_admin_screen( $message, $type );
    499547}
    500548
Note: See TracChangeset for help on using the changeset viewer.