My opinion may not carry any weight here, as I'm just a user of PHP, but
this discussion has given me a few ideas. As Ron and Val (and others) have
pointed out, there's no way for PHP to know how an *input* value is going
to be used. Would it perhaps be better to filter *output* values?
The same scheme of proposed filters could instead be applied just-in-time as
values hit an output function. I'm not sure how exactly it could be
implemented, but something similar to the pg_{select|insert|update|delete}
scheme might work. For html output, echo() and print() could be modified.
This way, when I echo a $_GET variable, it could automatically be run
through htmlentities(), and when I insert the same variable into a database
it will be run through pg_convert()/pg_escape_string(). I can see there
being difficulties identifying dangerous values if variables have been
interpolated into a string, but perhaps a tainting model could solve this.
(The in-house PHP framework that we use does basically the above. Our
database objects read metadata for the tables they manipulate and their
__set() methods automatically convert values to the appropriate column
types. Our template objects and functions automatically use htmlentities()
or addslashes() as required when outputting variables.)
Just my $0.02,
Benj Carson
On February 6, 2005 10:21 am, Rasmus Lerdorf wrote:
> Well, you already have the problem. The filter hook has been in PHP5
> for 2 years now and people are using it already. And yes, your code is
> likely not to work on those servers if you are expecting raw html tags
> to get through.
>
> There are plenty of people who have to operate under a mandated security
> policy. That policy may state among many other things that no
> user-originated raw html tags may ever be displayed. Now, if I gave you
> that problem and a couple of thousand servers running millions of lines
> of PHP code, how would you solve it?
>
> My solution is to block everything and then go and fix the few places
> where raw tags are actually supposed to get through and make sure those
> few places are validated correctly.
>
> You seem to be be indicating that you would go through every line of
> code and make sure every single application did all validation correctly.
>
> Want to wager a guess at who would be done first?
>
> I am wide open to other approaches to solving this problem.
>
> -Rasmus
>
> Ron Korving wrote:
> > Well there you go. A default filter. So I don't know what you mean with
> > "For the 18th time, nobody is talking about enabling it by default.",
> > because an administrator might. And I as a developer have no clue.
> > Personally, I don't see why a webserver admin should need to secure his
> > server through means of a default filter. There are good ways to secure
> > a machine. This is not one of them You don't secure a server by
> > setting a default that a user can override. So really, that is no
> > argument.
> >
> > Like I said before. If a webserver admin dicatates the default way
> > $_GET and $_POST data is perceived, a website developer has no choice
> > but to use this filtering mechanism on every input variable he
> > receives, because he just can't rely on PHP's default behaviour
> > anymore. You see, not everybody agrees that you can't do without input
> > filtering (myself for example), so in the end, there's no doubt in my
> > mind that forcing a new magic default on PHP-users will make a lot of
> > people unhappy.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php