gpt4 book ai didi

php - 请求已被黑洞 - CakePHP

转载 作者:可可西里 更新时间:2023-11-01 13:45:17 30 4
gpt4 key购买 nike

我正在使用 CakePHP 的 SecurityComponent。它非常重要,因为它可以从 CSRF 攻击中保存表单。我的项目总共有 10-12 个表单,这是我的第一个 CakePHP 项目。启用 SecurityComponent 后,我遇到了一点麻烦,但经过几分钟的小心后,我可以摆脱它。这是我项目的最后一种形式,似乎一切对我来说都是正确的,但形式仍然是黑洞:(。任何人都可以告诉我问题吗?我不想禁用 CSRF 检查或 SecurityComponent。这是我的 View 代码:

<?php
echo $this->Form->create('Record');
?>
<script type="text/javascript"> var me = new MetroExam(); </script>
<div class="exam_paper">
<div class="question_box" id="q_b">
<div class="q_n_a_header">
<div class="instructions">
<b>Instructions:</b><br>
<?=$inst['value_text']; ?>
</div>
<div id="timer">Please wait</div>
</div>
<div id="q_paper">
<img id="q" style="display: none;" src="/oes/<?=$exam['path'].'?ts='.time(); ?>">

<img id="loading_img" src="/oes/img/loading.gif">
</div>
</div>
<div class="ans_box" id="a_b">
<!-- information about answer paper. !important -->
<?php
$i = 0;

//these fields are essential for evaluating ans paper
echo $this->Form->hidden('submit', array('value' => 'true'));
echo $this->Form->hidden('start_time', array('value' => ''));
echo $this->Form->hidden('end_time', array('value' => ''));
echo $this->Form->hidden('duration', array('value' => ''));
echo $this->Form->hidden('valid', array('value' => ''));
echo $this->Form->hidden('passed', array('value' => ''));

//options for all radio
$options = array(
'1' => 'A',
'2' => 'B',
'3' => 'C',
'4' => 'D'
);
if($exam['choices'] == 5){
$options['5'] = 'None';
}

$questions = (int)$exam['questions']; // 40 <= $exam['questions'] <= 100
$i = 1;
while($questions--){
echo '<div class="'.(($i%2)==1?'each_answer_even':'each_answer_odd').'" id="ans-'.$i.'">';
echo '<div class="q_number">'.($i <= 9 ? '0'.$i : $i).'</div>';
$name = 'ans'.str_pad($i, 3, '0', STR_PAD_LEFT);
$attributes = array('empty' => false, 'legend' => false, 'onclick' => 'me.answer_click('.$i.')');
echo '<div class="mcq">'.$this->Form->radio($name, $options, $attributes).'</div>';
echo '</div>';
$i++;
}
echo $this->Form->end('Submit');
?>
</div>
</div>

这基本上是一个 MCQ 考试表格。其中每组有 4 或 5 个单选按钮,表格中总共有 40 到 100 组。我正在使用 CakePHP 2.4。提前致谢。

最佳答案

根据评论,出现问题是因为您正在更改表单的隐藏值。 SecurityComponent 的工作方式是它“锁定”字段的名称,因此作恶者无法在发送表单后添加新字段或更改值。 但是它对隐藏值更加严格,因为它锁定了字段名值。因此,通过使用 jQuery 更改它,您正在黑洞化您自己的表单。

有一个很好的小帖子,我从中学到了这一点,拿一个 look at it .那里的作者还解释了绕过这个问题的两种方法。一种是禁用隐藏字段的安全性,因此为 token 计算的哈希值不包括这些值……这不是真正安全的……
另一种解决方案是修改 FormHelper,并告诉它“锁定”隐藏字段 names 而不是值。我不记得作者在示例中使用的是哪个版本的 Cake,但那里给出的代码实际上应该是相同的。因此,使用该解决方案,您可以使用选项数组告诉表单不要对您如此严格。

哦,那里给出的另一个选项(这是我通常使用的)(我现在刚刚在那里读到它......我想我自己想出来......哦好吧),就是使用普通输入您想要隐藏的文本字段,并添加一个 css 样式,如 display:none

你认为什么是最好的取决于你。我喜欢 css 选项,因为它更简单,而且实际上,如果有人要破坏我的 css(使用 Firebug 或类似的东西),他们也可以使用隐藏字段的值来做,它不需要任何更多的努力。无论如何,在处理该表单提交时,您应该采取所有额外的步骤和验证。但正如我所说,您认为哪种方式最适合您的情况取决于您。

关于php - 请求已被黑洞 - CakePHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002685/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com