无法验证CSRF令牌

时间:2016-02-04 21:43:11

标签: php yii

我知道这已经被问过,但我的问题有点不同。在我的.php文件中,我有:

<?php
/* @var $this SiteController */
$this->pageTitle=Yii::app()->name;
?>

<div id="page-content">
    <h1 class="gasparregular">Welcome back, <?php echo Yii::app()->user->table->name ?>!</h1>
    <h2 style="color:white;">Current Promotion: <?php echo Yii::app()->user->table->promo ?></h2>
    <span class="help-text">To check, please enter their xxxID:</span>

    <?php
    if(isset($_POST['submit'])) 
    {

        $message=
        'First Name: '.$_POST['xxxid'].'<br />
        Last Name: '.$_POST['xxxid'].'<br />
        Phone:  '.$_POST['xxxid'].'<br />
        Email:  '.$_POST['xxxid'].'<br />
        Comments: '.$_POST['xxxid'].'
        ';

        require "phpmailer/class.phpmailer.php";

        // Instantiate Class  
        $mail = new PHPMailer();  

        // Set up SMTP  
        $mail->IsSMTP();               
        $mail->SMTPAuth = true;         
        $mail->SMTPSecure = "ssl"; 
        $mail->Host = "smtp.gmail.com"; 
        $mail->Port = 465; 
        $mail->Encoding = '7bit';

        // Authentication  
        $mail->Username   = "xxx@xxx.com";
        $mail->Password   = "dswdcssd1yfs";

        // Compose
        $mail->SetFrom("xxx@xxx.com");
        $mail->AddReplyTo("xxx@xxx.com");
        $mail->Subject = "Hello";
        $mail->MsgHTML($message);

        // Send To  
        $mail->AddAddress("ggggdssae@hotmail.com", "Recipient Name");
        $result = $mail->Send();
        $message = $result ? 'Successfully Sent!' : 'Sending Failed!';     

        unset($mail);
        $URL="google.ca"; 

        header ("Location: $URL"); 
    }
    ?>

<form name="form1" id="form1" action="" method="post">
    <fieldset>
        <input type="text" name="xxxid" placeholder="xxx ID" />
        <br />
        <input type="submit" name="submit" value="Validate" />
    </fieldset>
</form>

当我输入一个数字并单击验证按钮时,它会发送一封电子邮件。没有Yii,它在我的本地环境中工作正常。但是当我把它放在使用Yii的实际网站上时,我得到了:

  

错误无法验证CSRF令牌。

1 个答案:

答案 0 :(得分:0)

表格需要处理CSRF,这里有很多选项:

你可以从控制器中禁用它:

$this->enableCsrfValidation = false;

或者在视图中使用ActiveForm,它将处理CSRF。

<强>更新

Stack Overflow 中有很多关于此问题的问题,但重要的是要知道 CSRF(跨站请求伪造)是确定的提交的表单数据来自您的应用。

更多信息:http://www.yiiframework.com/doc-2.0/yii-web-request.html