diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php index 59671a0cba64f976c307daae5846aea699ec578d..a3fb4636d1c9c46f8d5a675f6689b8461e840529 100644 --- a/lib/plugins/acl/admin.php +++ b/lib/plugins/acl/admin.php @@ -31,7 +31,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { return array( 'author' => 'Andreas Gohr', 'email' => 'andi@splitbrain.org', - 'date' => '2009-08-07', + 'date' => '2010-01-17', 'name' => 'ACL Manager', 'desc' => 'Manage Page Access Control Lists', 'url' => 'http://dokuwiki.org/plugin:acl', @@ -67,6 +67,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { // fresh 1:1 copy without replacements $AUTH_ACL = file(DOKU_CONF.'acl.auth.php'); + // namespace given? if($_REQUEST['ns'] == '*'){ $this->ns = '*'; @@ -89,7 +90,8 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { } // handle modifications - if(isset($_REQUEST['cmd'])){ + if(isset($_REQUEST['cmd']) && checkSecurityToken()){ + // scope for modifications if($this->ns){ if($this->ns == '*'){ @@ -310,6 +312,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL; echo '<input type="hidden" name="do" value="admin" />'.NL; echo '<input type="hidden" name="page" value="acl" />'.NL; + echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL; echo '</div></form>'.NL; } @@ -480,11 +483,11 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { $alt = '+'; } $ret .= '<img src="'.$img.'" alt="'.$alt.'" />'; - $ret .= '<a href="'.wl('',$this->_get_opts(array('ns'=>$item['id']))).'" class="idx_dir'.$cl.'">'; + $ret .= '<a href="'.wl('',$this->_get_opts(array('ns'=>$item['id'],'sectok'=>getSecurityToken()))).'" class="idx_dir'.$cl.'">'; $ret .= $base; $ret .= '</a>'; }else{ - $ret .= '<a href="'.wl('',$this->_get_opts(array('id'=>$item['id'],'ns'=>''))).'" class="wikilink1'.$cl.'">'; + $ret .= '<a href="'.wl('',$this->_get_opts(array('id'=>$item['id'],'ns'=>'','sectok'=>getSecurityToken()))).'" class="wikilink1'.$cl.'">'; $ret .= noNS($item['id']); $ret .= '</a>'; } @@ -562,6 +565,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { echo '<input type="hidden" name="acl_w" value="'.hsc($this->who).'" />'.NL; echo '<input type="hidden" name="do" value="admin" />'.NL; echo '<input type="hidden" name="page" value="acl" />'.NL; + echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL; echo '<table class="inline">'; echo '<tr>'; echo '<th>'.$this->getLang('where').'</th>'; diff --git a/lib/plugins/acl/ajax.php b/lib/plugins/acl/ajax.php index e383f0d352ed2d93fe03fb0d9eda2ecef18a1eaa..d3e88d932edb4429c06aec20b0f1f4512c8be6a6 100644 --- a/lib/plugins/acl/ajax.php +++ b/lib/plugins/acl/ajax.php @@ -19,11 +19,11 @@ require_once(DOKU_INC.'inc/auth.php'); //close session session_write_close(); -if(!auth_isadmin()) die('forbidden'); +if(!auth_isadmin()) die('for admins only'); +if(!checkSecurityToken()) die('CRSF Attack'); $ID = getID(); -if(!auth_isadmin) die('for admins only'); require_once(DOKU_INC.'inc/pluginutils.php'); require_once(DOKU_INC.'inc/html.php'); $acl = plugin_load('admin','acl'); diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js index 7ab83db585852e020f3b5cbc24f1828259410d10..449a3c16a5ded6c5e2097df8cbda2d49a7b59ff7 100644 --- a/lib/plugins/acl/script.js +++ b/lib/plugins/acl/script.js @@ -48,7 +48,8 @@ acl = { data[1] = ajax.encVar('id',frm.elements['id'].value); data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value); data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value); - data[4] = ajax.encVar('ajax','info'); + data[4] = ajax.encVar('sectok',frm.elements['sectok'].value); + data[5] = ajax.encVar('ajax','info'); ajax.elementObj = $('acl__info');