我是cakephp的新手,现在我正在研究带有cakephp的新项目。我目前正在做的任务是为整个项目做CSRF保护。我已经阅读了官方的cakephp 2 cookbook,我按照那本书中的解释做了。但是,现在我正面临
“请求已被黑洞了。 错误:在此服务器上找不到请求的地址'/ admin / accounts / add'。“每次提交新用户添加表单时。 我的代码是:
public $components = array(
'Security' => array(
'csrfExpires' => '+1 hour'
),
'Search.Prg' => array(
'commonProcess' => array(
'paramType' => 'named',
'filterEmpty' => true
))
);
public function beforeFilter() {
parent::beforeFilter();
$this->layout = 'admin';
$this->Security->blackHoleCallback = '_blackHole';
}
public function _blackHole($error) {
die($error);
}
通过这样做,出现了'auth'错误。
这是我的观看代码。
<div class="">
<div class="clearfix"></div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<?php echo $this->Session->flash(); ?>
<div class="x_panel">
<div class="x_title">
<h2>アカウント登録</h2>
<div class="clearfix"></div>
</div>
<div class="x_content">
<br />
<?php echo $this->Form->create('MasterUser', array('class' => 'form-horizontal form-label-left', 'inputDefaults' => array('label' => false, 'div' => false), 'id' => 'demo-form', 'autocomplete' => 'off')); ?>
<div class="form-group">
<?php echo $this->Form->label('last_name', '姓 <span class="required">*</span>', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-2 col-sm-2 col-xs-12">
<?php echo $this->Form->input('last_name', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
<?php echo $this->Form->label('first_name', '名 <span class="required">*</span>', array('class' => 'control-label col-md-1 col-sm-1 col-xs-12'));?>
<div class="col-md-2 col-sm-2 col-xs-12">
<?php echo $this->Form->input('first_name', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
</div>
<div class="form-group">
<?php echo $this->Form->label('last_name_kana', 'セイ <span class="required">*</span>', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-2 col-sm-2 col-xs-12">
<?php echo $this->Form->input('last_name_kana', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
<?php echo $this->Form->label('first_name_kana', ' メイ <span class="required">*</span>', array('class' => 'control-label col-md-1 col-sm-1 col-xs-12'));?>
<div class="col-md-2 col-sm-2 col-xs-12">
<?php echo $this->Form->input('first_name_kana', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
</div>
<div class="form-group">
<?php echo $this->Form->label('username', ' ログイン ID <span class="required">*</span>', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-5 col-sm-5 col-xs-12">
<?php echo $this->Form->input('username', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
</div>
<div class="form-group">
<?php echo $this->Form->label('mail', ' メールアドレス <span class="required">*</span>', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-5 col-sm-5 col-xs-12">
<?php echo $this->Form->input('mail', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
</div>
<div class="form-group">
<?php echo $this->Form->label('password', ' パスワード <span class="required">*</span>', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-5 col-sm-5 col-xs-12">
<?php echo $this->Form->input('password', array('label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
</div>
<div class="form-group">
<?php echo $this->Form->label('password_confirm', ' 確認用パスワード <span class="required">*</span>', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-5 col-sm-5 col-xs-12">
<?php echo $this->Form->input('password_confirm', array('type' => 'password', 'label' => false, 'class' => 'form-control col-md-7 col-xs-12')); ?>
</div>
</div>
<div class="form-group">
<?php echo $this->Form->label('', '', array('class' => 'control-label col-md-3 col-sm-3 col-xs-12'));?>
<div class="col-md-5 col-sm-5 col-xs-12">
<?php echo $this->Form->radio('role',array('1'=>'管理者','2'=>'編集者'), array('default' => '1', 'class' => 'flat', 'legend' => false, 'label' => false)); ?>
</div>
</div>
</p>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<?php echo $this->Form->button('戻る', array('type' => 'reset', 'class' => 'btn btn-primary')); ?>
<?php echo $this->Form->button('削除', array('type' => 'reset', 'class' => 'btn btn-default')); ?>
<?php echo $this->Form->button('変更を保存', array('type' => 'submit', 'class' => 'btn btn-success')); ?>
</div>
</div>
<?php $this->Form->end(); ?>
</div>
</div>
</div>
</div>
</div>
我该怎么办? 请帮助我。我用谷歌搜索,但这只是浪费时间。我没办法。 请帮帮我。
答案 0 :(得分:0)
如果您尝试发送表单数据而不保留表单组件生成的隐藏标记字段,安全组件将对您的请求进行黑洞处理。
如果您要发送AJAX请求,这种情况会发生很多,解决此问题的最佳方法是简单地使用Cake Form Component创建的表单序列化并发送,而不是尝试直接通过AJAX发送离散值:
$.post('/controller/action', $('#my-form-id').serialize(), function(data) {
result = $.parseJSON(data);
if(!result) {
//do Something
} else {
//succeeded
}
如果您通过此检查发送到Controller操作的数据,那么您将看到额外的字段,这些字段将阻止Cake Security Component对您的请求进行黑名单!
如果您没有使用AJAX,那么只需确保使用Form Helper构建表单 - 另请注意,如果您在生成表单后更改表单,那么CakePHP将对您的请求进行黑洞检查,因为它检测到表单已被篡改 - 这是为了您的安全。
如果您在黑洞请求中显示Auth错误,那么我会检查您正在访问的操作是否包含$ this-&gt; Auth-&gt; allow()(或者您已登录!),尝试将$ this-&gt; Auth-&gt; allow()放入你的beforeFilter中以检查这是原因(这个控制器禁用了Auth) - 如果是,那么你需要查看你的授权系统。
请查看以下链接: