Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单欺骗代码_Php_Forms_Security_Spoofing - Fatal编程技术网

PHP表单欺骗代码

PHP表单欺骗代码,php,forms,security,spoofing,Php,Forms,Security,Spoofing,我有以下代码,可以防止表单欺骗。令牌用于匹配并确保提交的表单来自该页面 if (isset($_POST['Submit'])) { if (!isset($_POST['token']) || $_POST['token'] != $_SESSION['token']) { // error, form spoofing, return to users' page or do something else echo '<script>',

我有以下代码,可以防止表单欺骗。令牌用于匹配并确保提交的表单来自该页面

if (isset($_POST['Submit'])) {
    if (!isset($_POST['token']) || $_POST['token'] != $_SESSION['token']) {
        // error, form spoofing, return to users' page or do something else
        echo '<script>',
                 'alert("Form spoofing error!! Please Try again later")',
             '</script>';
    } else {
        //Continue with submission
    }
}
添加了一个隐藏字段,该字段与提交后会话开始时创建的令牌相匹配:

<input name="token" id="token" value="<?php echo md5(time()); ?>" type="hidden">

以下是一个您可以尝试的示例,它希望在POST请求之前至少先加载一次页面,同时为了好玩,还会对令牌密钥进行哈希:

<?php 
session_start();

if ($_SERVER['REQUEST_METHOD']=='POST') {

    if (!isset($_SESSION['token_key']) || 
        !isset($_SESSION['token'])     || 
        !isset($_POST[$_SESSION['token_key']]) || 
        $_POST[$_SESSION['token_key']] != $_SESSION['token']) {

        echo 'Form spoofing error!';
    } else {
        //Continue with validation ect
        echo 'alls good!';
    }
}
//set after any checks on previous values
$_SESSION['token_key'] = sha1(microtime(true));
$_SESSION['token'] = sha1(microtime(true)+1);
?>
<form method="POST" action="">
    <input type="hidden" name="<?php echo $_SESSION['token_key'];?>" value="<?php echo $_SESSION['token'];?>" />
    <p><input type="text" name="yada" size="20">
    <input type="submit" value="Submit" name="B1"></p>
</form>


你也应该考虑在你的哈希中添加一个盐,因为你的方法是有人能够找到脚本运行的时间,他们可以只需要一个散列并欺骗你的令牌。添加盐后,他们还需要知道盐的种类

md5(time()+53498238923);

任何随机数都可以。

何时生成
$\u会话['token']
?您是否可以在比较旧令牌之前在页面加载时生成新令牌?echo
$\u POST['token']
$\u SESSION['token']
以查看它们的价值。时间太早,而且我没有足够的咖啡来查看它是什么。一定要尝试Siamak建议的调试,我还建议您使用!==(身份而不是平等)。您认为这将如何防止表单欺骗?我仍然可以抓取有效的令牌并发送我想要的任何东西。您在这两个页面上都启动了会话吗?我将尝试这个。谢谢。我收到“表单欺骗错误!”提交后的消息和表单也已提交。也许有什么帮助吗?谢谢。也许你有一个会话问题,你应该检查你的会话是否正常。好的,如果我亲自发送给你的话,请你看一下我的文件。。如果可以的话?谢谢
md5(time()+53498238923);