使用ajax标记CSRF

时间:2015-01-23 20:01:26

标签: php jquery ajax

我使用一个带有生成令牌的脚本和网站的链接,但我总是有问题,第一次刷新下次一切都很好

session_start();
$link = 'http://localhost/';
$id_user = '123456789';

function getToken($name = '', $key)
{
    session_start();
    $token = sha1(uniqid());
    $_SESSION[$name.'_token'] = $token;
    return $token;
}


function checkToken($name = '', $post)
{
    session_start();
    global $link, $id_user;

    if(isset($_SESSION[$name.'_token']) && isset($_POST[$post]))
    {
        if(sha1($link.$id_user.$_SESSION[$name.'_token']) == $_POST[$post])
        {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
}

首先我创建新令牌,如果为空或不是ajax调用 我使用link,id用户和唯一令牌来验证是好还是noot

if(empty($_SESSION['new_token']) || !$_REQUEST['ajax'] AND empty($_POST)) {
    $tokenUnique = sha1($link.$id_user.getToken('new'));
} else {
    $tokenUnique = sha1($link.$id_user.$_SESSION['new_token']);
}

在ajax帖子中,如果checkToken好的话,我会用它来查看

if(checkToken('new', 'token_hidden') == false) {
   die('error token');
}

<input type="hidden" name="token_hidden" value="<?=$tokenUnique?>" />

你有安全的ajax或complet我的代码的解决方案吗? 感谢

Jquery的

$.ajax({
    type: "POST",
    data: $(div).serialize(),
    url: 'file.php?ajax=1',
    success: function(data) {
        var obj = JSON.parse(data);
    }
});

0 个答案:

没有答案