[wp-hackers] Magic Quoting removal Road Map/Plan

Jari Pennanen ciantic at oksidi.com
Fri Jun 10 16:05:49 UTC 2011


Hello!

Okay I created a GIST since I cannot obviously write valid code at once:

https://gist.github.com/1019157


2011/6/10 Jari Pennanen <ciantic at oksidi.com>:
> Hello!
>
> Here is a quick take on the matter as code (only for _POST as example):
>
>
>
> $WP_NONQUOTED_POST = array();
>
> /**
>  * Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
>  *
>  * Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
>  * or $_ENV are needed, use those superglobals directly.
>  *
>  * @access private
>  * @since 3.0.0
>  */
> function wp_magic_quotes() {
>    global $WP_ORIGINAL_POST;
>
>    // If already slashed, strip.
>    if ( get_magic_quotes_gpc() ) {
>        $_GET    = stripslashes_deep( $_GET    );
>        $_POST   = stripslashes_deep( $_POST   );
>        $_COOKIE = stripslashes_deep( $_COOKIE );
>    }
>
>    // Original non quoted
>    $WP_NONQUOTED_POST = $_POST;
>
>    // Escape with wpdb.
>    $_GET    = add_magic_quotes( $_GET    );
>    $_POST   = add_magic_quotes( $_POST   );
>    $_COOKIE = add_magic_quotes( $_COOKIE );
>    $_SERVER = add_magic_quotes( $_SERVER );
>
>    // Force REQUEST to be GET + POST.
>    $_REQUEST = array_merge( $_GET, $_POST );
>
>    set_magic_quotes_runtime(true);
> }
>
> /**
>  * Return original POST without magic quoting
>  *
>  * @param false|string $key Key, if not given whole POST is returned
>  * @param mixed $default Default value if key is not found
>  * @return mixed Returns the value or default value if key is not found
>  */
> function wp_get_post($key=false, $default=null) {
>    global $WP_NONQUOTED_POST;
>
>    if ($key === false) {
>        return $WP_NONQUOTED_POST;
>    }
>    return isset($WP_NONQUOTED_POST[$key]) ? $WP_NONQUOTED_POST[$key]
> : $default;
> }
>
> 2011/6/10 Jari Pennanen <ciantic at oksidi.com>:
>> Hi!
>>
>> 2011/6/10 John Blackbourn <johnbillion+wp at gmail.com>:
>>> That's fine, but you're straying from the issue at hand. If functions
>>> like this were implemented we are still left with the $_GET and $_POST
>>> superglobals that are currently quoted. The issue is that we cannot
>>> remove quoting from these variables because it introduces a security
>>> vulnerability for every plugin and theme that's been written up until
>>> this point. If we can't remove quoting from the superglobals, this is
>>> a fruitless exercise.
>>
>> No sir. If everyone starts to use new API we can get rid of $_GET and
>> $_POST quoting. Get it? We must push everyone to use new API and when
>> in distant future, future of PHP6 maybe, we can get rid of this _GET
>> _POST quoting etc.
>>
>


More information about the wp-hackers mailing list