Security pass over all controller code. Mostly adding CSRF checking

and verifying user permissions, but there are several above-the-bar
changes:

1) Server add is now only available to admins.  This is a hard
   requirement because we have to limit server access (eg:
   server_add::children) to a user subset and the current permission
   model doesn't include that.  Easiest fix is to restrict to admins.
   Got rid of the server_add permission.

2) We now know check permissions at every level, which means in
   controllers AND in helpers.  This "belt and suspenders" approach will
   give us defense in depth in case we overlook it in one area.

3) We now do CSRF checking in every controller method that changes the
   code, in addition to the Forge auto-check.  Again, defense in depth
   and it makes scanning the code for security much simpler.

4) Moved Simple_Uploader_Controller::convert_filename_to_title to
   item:convert_filename_to_title

5) Fixed a bug in sending notification emails.

6) Fixed the Organize code to verify that you only have access to your
   own tasks.  In general, added permission checks to organize which had
   pretty much no validation code.

I did my best to verify every feature that I touched.
This commit is contained in:
Bharat Mediratta
2009-06-01 22:40:22 -07:00
parent b9af090cbd
commit 43abcd9386
38 changed files with 281 additions and 72 deletions

View File

@@ -107,6 +107,7 @@ class Admin_Comments_Controller extends Admin_Controller {
public function set_state($id, $state) {
access::verify_csrf();
$comment = ORM::factory("comment", $id);
$orig = clone $comment;
if ($comment->loaded) {
@@ -121,6 +122,7 @@ class Admin_Comments_Controller extends Admin_Controller {
public function delete_all_spam() {
access::verify_csrf();
ORM::factory("comment")
->where("state", "spam")
->delete_all();