将CSRF添加到formtoemailpro.php

时间:2018-01-09 10:10:51

标签: php forms csrf

发布于:https://codeutopia.net/blog/2008/10/16/how-to-csrf-protect-all-your-forms/

我正在尝试并且未能将代码添加到formtoemailpro.php https://formtoemail.com/developer_pricing.php

我将密钥生成器添加到表单页面:

//Generate a key, print a form:
$key = sha1(microtime());
$_SESSION['csrf'] = $key;

隐藏的领域:

<input type="hidden" name="csrf" value="<?php echo $key; ?>" />

但是我无法将以下内容添加到formtoemailpro.php并让它工作。我把上半部分放在表格的顶部,把'}'放在底部,然后加上'if(!isset'exssion以及表格处理部分的其他类似元素,我就失败了。< / p>

if($_SERVER['REQUEST_METHOD'] == 'POST')
            //Here we parse the form
if(!isset($_SESSION['csrf']) || $_SESSION['csrf'] !== $_POST['csrf'])
 throw new RuntimeException('CSRF attack');
 //Do the rest of the processing here
}

对不起我很抱歉,请有人帮助我吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果我低估了你的问题,这就是你需要做的事情:

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    //Here we parse the form
}

if(!isset($_SESSION['csrf']) || $_SESSION['csrf'] !== $_POST['csrf']){
    throw new RuntimeException('CSRF attack');
 //Do the rest of the processing here
}

确保在代码块上放置“{”,“}”。

此外,请确保在输出之前调用$_SESSION['csrf'] = $key;。 (回声,印刷等......)。请查看this Q&amp; A关于会话。