Make WordPress Core

Ticket #48022: 48022.2.patch

File 48022.2.patch, 3.3 KB (added by dkarfa, 5 years ago)
  • wp-includes/comment-template.php

     
    224224        if ( empty( $url ) || 'http://' == $url ) {
    225225                $return = $author;
    226226        } else {
    227                 $return = "<a href='$url' rel='external nofollow' class='url'>$author</a>";
     227                $return = "<a href='$url' rel='external nofollow ugc' class='url'>$author</a>";
    228228        }
    229229
    230230        /**
  • wp-includes/default-filters.php

     
    246246add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3 );
    247247add_action( 'check_comment_flood', 'check_comment_flood_db', 10, 4 );
    248248add_filter( 'comment_flood_filter', 'wp_throttle_comment_flood', 10, 3 );
    249 add_filter( 'pre_comment_content', 'wp_rel_nofollow', 15 );
     249add_filter( 'pre_comment_content', 'wp_rel_ugc', 15 );
    250250add_filter( 'comment_email', 'antispambot' );
    251251add_filter( 'option_tag_base', '_wp_filter_taxonomy_base' );
    252252add_filter( 'option_category_base', '_wp_filter_taxonomy_base' );
  • wp-includes/formatting.php

     
    30763076}
    30773077
    30783078/**
     3079 * Adds rel ugc string to all HTML A elements in content.
     3080 *
     3081 * @since 5.3.0
     3082 *
     3083 * @param string $text Content that may contain HTML A elements.
     3084 * @return string Converted content.
     3085 */
     3086function wp_rel_ugc( $text ) {
     3087        // This is a pre save filter, so text is already escaped.
     3088        $text = stripslashes( $text );
     3089        $text = preg_replace_callback( '|<a (.+?)>|i', 'wp_rel_ugc_callback', $text );
     3090        return wp_slash( $text );
     3091}
     3092
     3093/**
     3094 * Callback to add rel=ugc string to HTML A element.
     3095 *
     3096 * Will remove already existing rel="ugc" and rel='ugc' from the
     3097 * string to prevent from invalidating (X)HTML.
     3098 *
     3099 * @since 5.3.0
     3100 *
     3101 * @param array $matches Single Match.
     3102 * @return string HTML A Element with rel ugc.
     3103 */
     3104function wp_rel_ugc_callback( $matches ) {
     3105        $text = $matches[1];
     3106        $atts = wp_kses_hair( $matches[1], wp_allowed_protocols() );
     3107        $rel  = 'ugc';
     3108
     3109        if ( ! empty( $atts['href'] ) ) {
     3110                if ( in_array( strtolower( wp_parse_url( $atts['href']['value'], PHP_URL_SCHEME ) ), array( 'http', 'https' ), true ) ) {
     3111                        if ( strtolower( wp_parse_url( $atts['href']['value'], PHP_URL_HOST ) ) === strtolower( wp_parse_url( home_url(), PHP_URL_HOST ) ) ) {
     3112                                return "<a $text>";
     3113                        }
     3114                }
     3115        }
     3116
     3117        if ( ! empty( $atts['rel'] ) ) {
     3118                $parts = array_map( 'trim', explode( ' ', $atts['rel']['value'] ) );
     3119                if ( false === array_search( 'ugc', $parts ) ) {
     3120                        $parts[] = 'ugc';
     3121                }
     3122                $rel = implode( ' ', $parts );
     3123                unset( $atts['rel'] );
     3124
     3125                $html = '';
     3126                foreach ( $atts as $name => $value ) {
     3127                        if ( isset( $value['vless'] ) && 'y' === $value['vless'] ) {
     3128                                $html .= $name . ' ';
     3129                        } else {
     3130                                $html .= "{$name}=\"" . esc_attr( $value['value'] ) . '" ';
     3131                        }
     3132                }
     3133                $text = trim( $html );
     3134        }
     3135        return "<a $text rel=\"" . esc_attr( $rel ) . '">';
     3136}
     3137
     3138/**
    30793139 * Adds rel noreferrer and noopener to all HTML A elements that have a target.
    30803140 *
    30813141 * @since 5.1.0