The PHP filter class I'm working on (securiity)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I would appreciate feedback.
First php class I've written myself (the little tiny ones that are just over-glorified functions don't count.)

Probably has bugs. I have not thoroughly tested it - but I finally have a nice test sandbox to play with.

http://www.clfsrpm.net/xss/dom_script_test.php

That page has link to class source on it too.

The class is suppose to server side implement the Content Security Policy recommendation that can be found here:

http://people.mozilla.org/~bsterne/content-security-policy/

In theory (assuming no bugs) the class should flat out remove any content that would violate the specified policy server side so that users who do not have browsers that benefit from CSP also benefit.

Clearly it can not cover every scenario, IE a script from a white listed domain could modify the DOM introducing stuff that will still trigger browser side CSP filtering.

In addition to enforcing the specified policy, it also removes some stuff that ain't where it belongs, like meta tags outside the head etc.

One place where I deviate from the Mozilla CSP intentionally is in event attributes. The way I read the CSP recommendation, event attributes just aren't allowed. For the life of me, though, I can't figure out how to do effective client side form validation w/o at least onchange and onsubmit. So my class does allow white listing of event attributes, though they can not have any arguments (IE onchange="alert('hello');" gets filtered to onchange="altert();"

We'll have to see what the final standard is on that.

The test page lets you set the policy rules that are to be enforced (except no event handler whitelist, I'll have to add that) and has almost no input filtering (just enough to make the input load nicely into the DOM - clean html input should go through unmutilated)

I'll try to put together a pretty index page along with examples of usage, it should fit in nicely with most templating systems, for example, because they tend to construct the page and then send it.

But I can't do that until after the weekend as I'm going out of town.
Anyway, I'd really appreciate feedback on it, so it can be improved.

Just a note - it's not intended as a substitute for input filtering, CSP is intended as a second line of defense, and hopefully will be implemented in browsers soon. This class just gives the benefit of a sound CSP to users w/o a CSP enabled browser (which right now is all of them, though firefox has a partially implemented plugin).

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux