Re: K3 next steps / brain dump

Bharat Mediratta <[email protected]> Tue, 2 Apr 2013 09:28:36 -0700
Newsgroups gmane.comp.web.gallery.devel
Message-ID <CAESa+_mjQ3uYeLZ_A4VPimKUE8bBtpfkHS-XfmuHbbZxAANpJw@mail.gmail.com>
All sounds great to me!


On Tue, Apr 2, 2013 at 9:23 AM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:

> Hey Bharat,
>
> On 2 April 2013 01:28, Bharat Mediratta <[email protected]> wrote:
> >
> > On Fri, Mar 29, 2013 at 10:22 AM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:
> >>
> >> Bharat's todo before gallery can run:
> >> - K2->K3 replacement: ORM and ORM_MPTT
> >> - K2->K3 replacement: Database
> >> - K2->K3 replacement: Cache
> >> - bootstrap.php and index.php (note: I did the class name
> search'n'replace
> >> thing here)
> >> - Routing
> >
> >
> > Been busy for the past week, so progress has been slow here. I keep
> finding
> > all these ratholes that I'm trying to sidestep to just Get Things
> Working.
> > Oy.  I'll keep plugging away at it.
>
> No kidding on the ratholes!  Today I dropped in a hacked up version of
> K2's Input library and fired it up for the first time.  I managed to
> catch and fix a few more things, and it seems to get a bit further
> along, but still not there (HTTP_Exception_302 doesn't fire a redirect
> for some reason).
>
>
> >>
> >> The problem is that decamelize looks for [a-z][A-Z], which doesn't work
> >> with numbers.  One approach is to just do an extension like I did before
> >> (e.g. a new $num_sensitivity argument that changes it to [a-z0-9][A-Z]).
> >> That said, this is starting to make we wonder if extending the built-in
> >> functions is really a good approach and if we wouldn't be better served
> with
> >> two purpose-built functions instead.  Thoughts?
> >
> >
> > Sadly, I think that custom built functions are probably the right way to
> go
> > here.  Extending their framework and changing these APIs may break
> > assumptions in the Kohana framework code.
>
> Agreed - new functions up and pulled.
>
>
> >>
> >> Pagination
> >>
> >> This library was originally in Kohana 2.x, but left after 2.3, so we put
> >> it in kohana23_compat for 2.4.  Similarly, it was originally in Kohana
> 3.x
> >> but left after 3.1.  Some folks forked the module and made it compatible
> >> with 3.2 (https://github.com/kloopko/kohana-pagination), and others
> forked
> >> that to make it work with 3.3
> >> (https://github.com/webking/kohana-pagination).  Does it seem like
> pulling
> >> this in as another module is a reasonable idea?
> >>
> >> BTW, this is the only thing left in the kohana23_compat module...
> >
> >
> > I haven't looked it over carefully - but let's try it and see how it
> goes.
> > Pagination was a bit of a beast in K2 because it expected a certain
> > structure that we didn't always have.  If this pagination module sucks,
> it
> > might make sense to just write our own.  But let's start with their code
> for
> > now.
>
> Sounds like a plan.
>
>
> >>
> >> Input
> >>
> >> This library is gone with K3.  Instead, they recommend working with
> $_GET,
> >> $_POST, and $_SERVER directly.  Handling unset and default values can be
> >> handled using Arr as:
> >> Arr::get($_POST, "foo", "default foo");
> >>
> >> This part is pretty straightforward.  The only catch is that they need
> >> cleaning first.
> >>
> >> It was recommended to use Security::xss_clean() with K3.0, but that's
> >> since disappeared.  I'm looking for the best alternative, which
> shouldn't be
> >> too hard to find, but think the bigger question is this: *where* do we
> do
> >> this so nobody downstream has to think about it?
> >> - bootstrap?
> >> - an extension of Route?
> >> - an extension of Controller?
> >> - somewhere else?
> >
> >
> > The XSS cleaner in K2 was questionable at best.  We augmented it with our
> > own tweaks:
> >
> https://github.com/gallery/gallery3/blob/master/system/libraries/Input.php#L306
> >
> > Even that is pretty crappy and I don't trust it.  We really need to be
> very
> > suspicious of any content in the database and treat it very carefully
> when
> > we use it.  For K2 we overloaded html::clean to make it safe:
> >
> https://github.com/gallery/gallery3/blob/master/modules/gallery/helpers/MY_html.php#L32
> >
> > Then we used that (and all the other cleaning methods) everywhere.  My
> > assumption has always been that with html::clean AND the XSS cleaning
> code
> > we don't have to catch every single vector of attack, we've got enough
> > defense-in-depth to make hacking hard.
> >
> > The downside, though is that we are always possibly cleaning away
> something
> > that we really care about.  And cleaning is expensive.  :-/
> >
> > So options:
> > 1) Don't bother cleaning at all
> > 2) Create our own simple API for getting GET/POST/SERVER variables that
> does
> > cleaning and handles defaults
> > 3) Clean everything up front
> >
> > I'm in favor of #2 with an API like this:
> >
> > Input::GET("foo", "default foo");
> > Input::GET("foo", "default foo", Input::RAW);  // don't sanitize
> > Input::POST("foo", "default foo");
> > Input::SERVER("foo", "default foo");
> >
>
> Me too.  I've been taking a look at how we'd integrate the standalone
> HTMLPurifier, and it looks like we can be a bit faster if we use a
> singleton instance() function.  With this, we could *exactly* copy the
> old API (or at least the parts that Gallery used).  The instance would
> initialize the class, fire up and configure HTMLPurifier once, and set
> up an empty cache of purified entries.  Then, we purify them on demand
> and stick them in the cache so we shouldn't need to do it twice.  I
> haven't yet figured out if it makes sense to do them one superglobal
> array at a time or one entry at a time, but certainly it doesn't make
> sense to do all at once (for example, one might load Input to look for
> $_POST but never care about $_SERVER).
>
> I also like the Input::RAW idea.  It should come with a big
> disclaimer, and really shouldn't be needed too often since we can
> accept HTML markup, but it's still nice to have.
>
> > This has some advantages:
> > 1) It's close to what we have now so conversion is easier
> > 2) We can lazy-clean the input for efficiency
> > 3) We can use Input::RAW as a findable symbol for all places where we
> work
> > with raw data (set the RAW constant to some wacky value so that API users
> > have to use the constant)
> > 4) profit?
>
> Yes, yes, yes, and hell yes.  :-)
>
>
> > Regarding HTMLPurifier - it added so much weigh to the installed code
> size
> > that I was loathe to make it a default module.  Unless it's gotten a lot
> > smaller, I suspect I'll still feel the same way...
>
> The standalone version you found seems to be not *too* bad.  It's <1MB
> (<300k compressed) and seems like it was designed to play nice with
> caches.
>
> My feeling is this: we should build the Input class and make it use
> HTMLPurifier.  Then, once we're back in fully-running state, we can
> run some benchmarks to see how heavy it really is.
>
> Thoughts?
>
> Take care,
> Shad
>
>
> >
> > thoughts?
> > -Bharat
> >
>
>

------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire 
the most talented Cisco Certified professionals. Visit the 
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html

__[ g a l l e r y - d e v e l ]_________________________

[ list info/archive --> http://gallery.sf.net/lists.php ]
[ gallery info/FAQ/download --> http://gallery.sf.net ]