Make WordPress Core

Changeset 46018


Ignore:
Timestamp:
09/04/2019 06:40:10 PM (7 years ago)
Author:
desrosj
Message:

Fix for URL sanitization in wp_kses_bad_protocol_once().

Merges [45997] to the 3.8 branch.

Props irsdl, sstoqnov, whyisjake.

Location:
branches/3.8
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/3.8

  • branches/3.8/src/wp-includes/kses.php

    r44046 r46018  
    13091309 */
    13101310function wp_kses_bad_protocol_once($string, $allowed_protocols, $count = 1 ) {
     1311        $string  = preg_replace( '/(&#0*58(?![;0-9])|&#x0*3a(?![;a-f0-9]))/i', '$1;', $string );
    13111312        $string2 = preg_split( '/:|&#0*58;|&#x0*3a;/i', $string, 2 );
    13121313        if ( isset($string2[1]) && ! preg_match('%/\?%', $string2[0]) ) {
  • branches/3.8/tests/phpunit/tests/kses.php

    r33388 r46018  
    138138                        'feed:javascript:alert(1)',
    139139                        'feed:javascript:feed:javascript:feed:javascript:alert(1)',
     140                        'javascript&#58alert(1)',
     141                        'javascript&#x3ax=1;alert(1)',
    140142                );
    141143                foreach ( $bad as $k => $x ) {
     
    147149                                                $this->assertEquals( str_replace( '&', '&', $x ), $result );
    148150                                                break;
    149                                         case 22: $this->assertEquals( 'javascript&#0000058alert(1);', $result ); break;
    150                                         case 23: $this->assertEquals( 'javascript&#0000058alert(1)//?:', $result ); break;
    151                                         case 24: $this->assertEquals( 'feed:alert(1)', $result ); break;
    152                                         default: $this->fail( "wp_kses_bad_protocol failed on $x. Result: $result" );
     151                                        case 22:
     152                                                $this->assertEquals( 'javascript&#0000058alert(1);', $result );
     153                                                break;
     154                                        case 23:
     155                                                $this->assertEquals( 'javascript&#0000058alert(1)//?:', $result );
     156                                                break;
     157                                        case 24:
     158                                                $this->assertEquals( 'feed:alert(1)', $result );
     159                                                break;
     160                                        case 26:
     161                                                $this->assertEquals( 'javascript&#58alert(1)', $result );
     162                                                break;
     163                                        case 27:
     164                                                $this->assertEquals( 'javascript&#x3ax=1;alert(1)', $result );
     165                                                break;
     166                                        default:
     167                                                $this->fail( "wp_kses_bad_protocol failed on $k, $x. Result: $result" );
    153168                                }
    154169                        }
Note: See TracChangeset for help on using the changeset viewer.