Making WordPress.org


Ignore:
Timestamp:
01/16/2019 03:36:24 PM (5 years ago)
Author:
vedjain
Message:

WCPT: Applies code standard changes to wcpt plugin.

Most of the changes are small, but these are some important ones:

  1. Added nonce check in multiple places. This will ensure that request is always coming from the intended page.
  1. Escaped output HTML in many places. These are not necessarily XSS vulnerabilities, and in most places they were hardcoded. But its a good practice to always escape regardless of source.

Summary:

  • wcpt-event/class-event-admin.php
    • Added nonce check in metabox_save.
    • Escaped output in dislpay_meta_boxes
  • wcpt-event/class-event-application.php
    • Change definition of submit_application to pass $POST arguments
  • wcpt-loader.php
    • Indent whole file by 1 indent.
  • wcpt-meetup/class-meetup-admin.php
    • Added nonce check in maybe_update_meetup_data
  • wcpt-wordcamp/wordcamp-admin.php
    • Escaping in user_profile_wordcamp, column_data
    • Escaping using kses in post_row_actions
    • Use post_data_raw instead of $_POST in enforce_post_status
File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/wcpt/wcpt-event/class-event-admin.php

    r8083 r8085  
    4242
    4343        add_filter(
    44             'manage_' . $this->get_event_type() . '_posts_columns', array(
     44            'manage_' . $this->get_event_type() . '_posts_columns',
     45            array(
    4546                $this,
    4647                'column_headers',
     
    6061        add_filter( 'redirect_post_location', array( $this, 'add_admin_notices_to_redirect_url' ), 10, 2 );
    6162
    62         // Admin notices
     63        // Admin notices.
    6364        add_action( 'admin_notices', array( $this, 'print_admin_notices' ) );
    6465
     
    269270
    270271        $log_id = add_post_meta(
    271             $post->ID, '_status_change', array(
     272            $post->ID,
     273            '_status_change',
     274            array(
    272275                'timestamp' => time(),
    273276                'user_id'   => get_current_user_id(),
     
    275278            )
    276279        );
    277         // Encoding $post_type and status_change meta ID in key so that we can fetch it if needed while simultaneously be able to have a where clause on value
    278         // Because of the way MySQL works, it will still be able to use index on meta_key when searching, as long as we are querying just the prefix
     280        // Encoding $post_type and status_change meta ID in key so that we can fetch it if needed while simultaneously be able to have a where clause on value.
     281        // Because of the way MySQL works, it will still be able to use index on meta_key when searching, as long as we are querying just the prefix.
    279282        if ( $log_id ) {
    280283            add_post_meta( $post->ID, "_status_change_log_$post->post_type $log_id", time() );
     
    285288     * Hooked to `transition_post_status`, will send notifications to community slack channels based whenever an application status changes to something that we are interested in. Most likely would be when an application is declined or accepted.
    286289     *
    287      * @param string  $new_status New status
    288      * @param string  $old_status Old Status
     290     * @param string  $new_status New status.
     291     * @param string  $old_status Old Status.
    289292     * @param WP_Post $event
    290293     */
     
    294297     * Schedule notificaiton for declined application. Currently supports WordCamp and Meetup
    295298     *
    296      * @param WP_Post $event Event object
    297      * @param string  $label Could be WordCamp or Meetup
     299     * @param WP_Post $event Event object.
     300     * @param string  $label Could be WordCamp or Meetup.
    298301     * @param string  $location
    299      *
    300      * @return bool|string
    301302     */
    302303    public static function schedule_decline_notification( $event, $label, $location ) {
     
    313314    public static function send_decline_notification( $event_id, $label, $location ) {
    314315        $message = sprintf(
    315             "A %s application for %s has been declined, and the applicant has been informed via email.",
     316            'A %s application for %s has been declined, and the applicant has been informed via email.',
    316317            $label,
    317318            $location
     
    345346        }
    346347
    347         wp_localize_script( 'wcpt-admin', 'wcpt_admin', array(
    348             'gutenberg_enabled' => $gutenberg_enabled,
    349         ) );
     348        wp_localize_script(
     349            'wcpt-admin',
     350            'wcpt_admin',
     351            array( 'gutenberg_enabled' => $gutenberg_enabled )
     352        );
    350353
    351354        wp_enqueue_script( 'wcpt-admin' );
     
    402405     * Save metadata from form
    403406     *
    404      * @param int     $post_id Post ID.
    405      * @param WP_Post $post    Post Object.
     407     * @hook save_post
    406408     */
    407409    public function metabox_save( $post_id, $post ) {
     
    411413        }
    412414
     415        // Make sure the requset came from the edit post screen.
     416        if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-post_' . $post_id ) ) {
     417            die( 'Unable to verify nonce' );
     418        }
     419
    413420        // Don't add/remove meta on trash, untrash, restore, etc.
    414421        if ( empty( $_POST['action'] ) || 'editpost' !== $_POST['action'] ) {
     
    417424
    418425        if ( $this->get_event_type() !== get_post_type() ) {
    419             return;
    420         }
    421 
    422         // Make sure the requset came from the edit post screen.
    423         if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-post_' . $post_id ) ) {
    424426            return;
    425427        }
     
    432434            $values[ $key ] = isset( $_POST[ $post_value ] ) ? esc_attr( $_POST[ $post_value ] ) : '';
    433435
    434             // Don't update protected fields
     436            // Don't update protected fields.
    435437            if ( $this->is_protected_field( $key ) ) {
    436438                continue;
     
    477479        }
    478480
     481        // TODO: This should also pass $_POST params since nonce is verified here.
    479482        do_action( 'wcpt_metabox_save_done', $post_id, $orig_meta_values );
    480483
     
    500503        }
    501504
    502         // Don't show conflicting messages like 'Post submitted.'
     505        // Don't show conflicting messages like 'Post submitted'.
    503506        if ( in_array( 1, $this->active_admin_notices ) && false !== strpos( $location, 'message=8' ) ) {
    504507            $location = remove_query_arg( 'message', $location );
     
    527530        $screen = get_current_screen();
    528531
    529 
    530532        if ( empty( $post->post_type ) || $this->get_event_type() != $post->post_type || 'post' !== $screen->base ) {
    531533            return;
     
    570572        }
    571573
    572         // Note that this is private, see wcpt_get_log_entries()
     574        // Note that this is private, see `wcpt_get_log_entries()`.
    573575        add_post_meta(
    574             $post_id, '_note', array(
     576            $post_id,
     577            '_note',
     578            array(
    575579                'timestamp' => time(),
    576580                'user_id'   => get_current_user_id(),
     
    606610
    607611                    <p>
    608                         <strong><?php echo $key; ?></strong>:
    609                         <input type="checkbox" name="<?php echo $object_name; ?>"
    610                                id="<?php echo $object_name; ?>" <?php checked( get_post_meta( $post_id, $key, true ) ); ?><?php echo $readonly; ?> />
     612                        <strong><?php echo esc_html( $key ); ?></strong>:
     613                        <input type="checkbox" name="<?php echo esc_attr( $object_name ); ?>"
     614                               id="<?php echo esc_attr( $object_name ); ?>" <?php checked( get_post_meta( $post_id, $key, true ) ); ?><?php echo esc_attr( $readonly ); ?> />
    611615                    </p>
    612616
     
    614618
    615619                    <p>
    616                         <strong><?php echo $key; ?></strong>
     620                        <strong><?php echo esc_html( $key ); ?></strong>
    617621                        <?php if ( in_array( $key, $required_fields, true ) ) : ?>
    618                             <span class="description"><?php _e( '(required)', 'wordcamporg' ); ?></span>
     622                            <span class="description"><?php esc_html_e( '(required)', 'wordcamporg' ); ?></span>
    619623                        <?php endif; ?>
    620624                    </p>
     
    622626                    <p>
    623627                        <label class="screen-reader-text"
    624                                for="<?php echo $object_name; ?>"><?php echo $key; ?></label>
     628                               for="<?php echo esc_attr( $object_name ); ?>"><?php echo esc_html( $key ); ?></label>
    625629
    626630                        <?php
     
    629633                                ?>
    630634
    631                                 <input type="text" size="36" name="<?php echo $object_name; ?>"
    632                                        id="<?php echo $object_name; ?>"
    633                                        value="<?php echo esc_attr( get_post_meta( $post_id, $key, true ) ); ?>"<?php echo $readonly; ?> />
     635                                <input type="text" size="36" name="<?php echo esc_attr( $object_name ); ?>"
     636                                       id="<?php echo esc_attr( $object_name ); ?>"
     637                                       value="<?php echo esc_attr( get_post_meta( $post_id, $key, true ) ); ?>"<?php echo esc_attr( $readonly ); ?> />
    634638
    635639                                <?php
     
    638642                                ?>
    639643
    640                                 <input type="number" size="16" name="<?php echo $object_name; ?>"
    641                                        id="<?php echo $object_name; ?>"
     644                                <input type="number" size="16" name="<?php echo esc_attr( $object_name ); ?>"
     645                                       id="<?php echo esc_attr( $object_name ); ?>"
    642646                                       value="<?php echo esc_attr( get_post_meta( $post_id, $key, true ) ); ?>"
    643                                        step="any" min="0"<?php echo $readonly; ?> />
     647                                       step="any" min="0"<?php echo esc_attr( $readonly ); ?> />
    644648
    645649                                <?php
    646650                                break;
    647651                            case 'date':
    648                                 // Quick filter on dates
    649                                 if ( $date = get_post_meta( $post_id, $key, true ) ) {
     652                                // Quick filter on dates.
     653                                $date = get_post_meta( $post_id, $key, true );
     654                                if ( $date ) {
    650655                                    $date = date( 'Y-m-d', $date );
    651656                                }
     
    653658                                ?>
    654659
    655                                 <input type="text" size="36" class="date-field" name="<?php echo $object_name; ?>"
    656                                        id="<?php echo $object_name; ?>"
    657                                        value="<?php echo $date; ?>"<?php echo $readonly; ?> />
     660                                <input type="text" size="36" class="date-field" name="<?php echo esc_attr( $object_name ); ?>"
     661                                       id="<?php echo esc_attr( $object_name ); ?>"
     662                                       value="<?php echo esc_attr( $date ); ?>"<?php echo esc_attr( $readonly ); ?> />
    658663
    659664                                <?php
     
    662667                                ?>
    663668
    664                                 <textarea rows="4" cols="23" name="<?php echo $object_name; ?>"
    665                                           id="<?php echo $object_name; ?>"<?php echo $readonly; ?>><?php echo esc_attr( get_post_meta( $post_id, $key, true ) ); ?></textarea>
     669                                <textarea rows="4" cols="23" name="<?php echo esc_attr( $object_name ); ?>"
     670                                          id="<?php echo esc_attr( $object_name ); ?>"<?php echo esc_attr( $readonly ); ?>><?php echo esc_attr( get_post_meta( $post_id, $key, true ) ); ?></textarea>
    666671
    667672                                <?php
     
    675680                                    $value = get_post_meta( $post_id, $key, true );
    676681                                    ?>
    677                                 <select name="<?php echo $object_name; ?>"
    678                                         id="<?php echo $object_name; ?>"<?php echo $readonly; ?>>
     682                                <select name="<?php echo esc_attr( $object_name ); ?>"
     683                                        id="<?php echo esc_attr( $object_name ); ?>"<?php echo esc_attr( $readonly ); ?>>
    679684                                    <option value="<?php echo esc_attr( $value ); ?>" selected>
    680685                                        <?php echo ( $value ) ? esc_html( $currencies[ $value ] . ' (' . $value . ')' ) : ''; ?>
     
    696701
    697702                            case 'deputy_list':
    698                                 wp_dropdown_users( array(
    699                                     'role__in'         => array(
    700                                         'administrator',
    701                                         'editor',
    702                                     ),
    703                                     'name'             => esc_attr( $object_name ),
    704                                     'id'               => esc_attr( $object_name ),
    705                                     'selected'         => get_post_meta( $post_id, $key, true ),
    706                                     'show_option_none' => 'None',
    707                                 ) );
     703                                wp_dropdown_users(
     704                                    array(
     705                                        'role__in'         => array(
     706                                            'administrator',
     707                                            'editor',
     708                                        ),
     709                                        'name'             => esc_attr( $object_name ),
     710                                        'id'               => esc_attr( $object_name ),
     711                                        'selected'         => get_post_meta( $post_id, $key, true ),
     712                                        'show_option_none' => 'None',
     713                                    )
     714                                );
    708715                                break;
    709716                            default:
Note: See TracChangeset for help on using the changeset viewer.