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

Reply via email to