Blackhole requests when the action is the blackhole callback.

When a user requests the blackhole callback as an action we should
blackhole that request. The blackhole callback should not be URL
accessible.

Fixes #3496
This commit is contained in:
mark_story 2012-12-29 11:43:06 -05:00
parent 2ba117eeda
commit 1117ad2f1c
2 changed files with 22 additions and 3 deletions

View file

@ -218,6 +218,10 @@ class SecurityComponent extends Component {
$controller->request->params['requested'] != 1
);
if ($this->_action == $this->blackHoleCallback) {
return $this->blackhole($controller, 'auth');
}
if ($isPost && $isNotRequestAction && $this->validatePost) {
if ($this->_validatePost($controller) === false) {
return $this->blackHole($controller, 'auth');
@ -309,11 +313,10 @@ class SecurityComponent extends Component {
* @throws BadRequestException
*/
public function blackHole(Controller $controller, $error = '') {
if ($this->blackHoleCallback == null) {
if (!$this->blackHoleCallback) {
throw new BadRequestException(__d('cake_dev', 'The request has been black-holed'));
} else {
return $this->_callback($controller, $this->blackHoleCallback, array($error));
}
return $this->_callback($controller, $this->blackHoleCallback, array($error));
}
/**

View file

@ -194,6 +194,22 @@ class SecurityComponentTest extends CakeTestCase {
$this->Controller->Security->blackHole($this->Controller, 'csrf');
}
/**
* Ensure that directly requesting the blackholeCallback as the controller
* action results in an exception.
*
* @return void
*/
public function testExceptionWhenActionIsBlackholeCallback() {
$this->Controller->request->addParams(array(
'controller' => 'posts',
'action' => 'fail'
));
$this->assertFalse($this->Controller->failed);
$this->Controller->Security->startup($this->Controller);
$this->assertTrue($this->Controller->failed, 'Request was blackholed.');
}
/**
* test that initialize can set properties.
*