[wp-hackers] wp_magic_quotes makes me sad panda
Gavin Lambert
wphack at mirality.co.nz
Mon Sep 27 10:49:06 UTC 2010
I've just upgraded my blog from WP 2.7 to 3.0.1 (yes, I know, I'm
slow). After doing so, one of my (currently private) plugins
broke, due to mysterious extra backslashes in $_POST.
This was very peculiar, since like any good PHP developer I had
written code to call stripslashes if get_magic_quotes_gpc() was
on, and I happened to know that on my site it was off anyway.
Eventually, I traced this back to the mysterious addition of
wp_magic_quotes, apparently added in 3.0.0. What the heck?
Now, I've searched the archives (a bit, since it doesn't have a
"real" search option), and apparently the reason for adding this
was for backwards compatibility with lazy plugin authors who don't
know how to write PHP code. Or to disable magic_quotes_gpc on
their servers. So it's being forced on anyway.
I have several problems with this:
1. For the unlucky souls who actually do have magic_quotes_gpc
enabled, the slashes are being added by PHP, stripped by WP,
re-added, and then finally will almost certainly be stripped again
by the plugin prior to use. This seems like a colossal waste of
time.
2. Lazy plugin authors who don't know how to write PHP code
shouldn't be coddled, they should be educated. If they write code
that makes them vulnerable to injection attacks in private
plugins, then they deserve to have their blog destroyed. If they
do it in public plugins, then hopefully someone will eventually
notice that the code is broken and tell them how to fix it. Or
people will stop using that plugin after it breaks their
site. [Note, however, that even then only the class of plugins
that directly execute SQL based on GPC parameters could possibly
be vulnerable. I really don't think that this is a big group.]
3. WP provides no apparent way to detect whether this
transformation has been done (like "normal" PHP does with
get_magic_quotes_gpc). This means that it'll be even harder in
future to get rid of this wart, because plugin authors won't be
able to make their stripslashes calls properly conditional. (In
other words, this has introduced a new future compatibility
problem.)
4. Quite a bit (possibly even the majority) of GPC data doesn't
end up hitting the database anyway, so applying magic quotes to it
is pointless.
5. Magic quotes are deprecated (and disabled by default) in PHP 5
and will be disappearing entirely in PHP 6. In other words, even
the developers of PHP have recognised that they're a silly idea.
At the very least, #3 ought to be fixed, to at least entertain the
possibility of future sanity. Ideally, though, wp_magic_quotes
should be removed entirely.
[And I apologise if my tone seems overly confrontational or
insulting. But this *really*, *really* annoys me, probably at
least partly because all the chasing around to find the extra
slashes is still fresh.]
More information about the wp-hackers
mailing list