NYCPHP Meetup

[nycphp-talk] Short Tags deprecated?

Hans Zaunere lists at zaunere.com
Mon Aug 31 11:00:56 EDT 2009


> > Yeah something like this could be handy, certainly.  I typically
push/adapt
> > an object into the template which is property overloaded.  Then
something
> > like:
> >
> > <?=$Object->FirstName?>
> 
> I'm afraid that this is getting us back to magic_quotes_gpc:

Negative - magic_* is global type behavior that's automatic - evil...

> because now I might want to write
> 
> $first_name=$Object->FirstName;
> 
>     and then do something with $first_name that isn't writing it into
> HTML.  magic_quotes_gpc was effective protection against a certain

But you'd always be writing into HTML.  The escaping as it's done above is
only after a regular data object has been adapted/pushed into an HTML
template.  The original data is never changed, and the escaping is use case
specific.  Back in my model/controller, my data object gives raw data, just
as it's stored.

I could write an adapter and push data in, that let's say, is for SQL - JSON
- CSV - XML - etc.  Each adapter would wrap the data as appropriate.  If I
had an adapter for MySQL SQL generation and one for Oracle SQL generation,
they would even escape things differently, based on the type of SQL (and
connection resource/charset/etc in fact).  Very different from magic_*

> category of HTML injection faults,  but it made it difficult to write
> entirely correct code that processes the content of strings.  I prefer
> the model of "escape at the time of output" rather than preemptive
> escaping:  particularly these days,  where you might be escaping a
> variable to be a Javascript string literal instead of an HTML code.
> 
>     Today people are realizing that HTML/Javascript injection attacks
> are difficult to stop (there are lots of clever ways to inject
> Javascript that you'd never think of),  and some systems are taking
> different approaches.  ASP.NET,  for instance,  has an "application
> firewall" built in that looks for dangerous inputs in form variables and
> that will abort your application if you get fed junk.  Although my first
> impression is that this is "magic_quotes_gpc all over again",  and I've
> definitely seen the system block legitimate input,  Microsoft has done a
> good job of justifying this behavior.

No argument with HTML injection being a mess, but the above example is
exactly "escape at the time of output" - and escape based on the exact
destination, so it's very granular.

> > Outputs correctly escaped (or processed in any other way depending on
what
> > the overload wants to do) content.  Quite handy and has proved
effective.
> >
> > It does seem that it'd be handy to have some type of "stdout" processing
> > hook that can be overridden, while providing a shorthand for working in
> > templates.
>
> It makes some people feel dirty,  but you can do this with global
> variables,  assuming your template system remembers to set them when you
> get in or out of a template.  My own "php on nails" system has quite a

Mine does - they aren't "global" but scoped only for that template.  When an
object is pushed in, it's adapted/wrapped with an object that is designed
specifically for output in whatever type of template I'm dealing with.

> few functions that behave differently if serving a web page or run from
> the command line.

Ditto - PHP on nails, I like that...

H





More information about the talk mailing list