我对网络安全很新。我想知道在javascript中对请求使用令牌的正确方法是什么才能再次保护CSRF。有人可以给我看一个代码示例吗?我知道如何使用提交按钮正确地处理表单。
dataType: "text",
url: '/username.php',
data: 'username=' + $('#username').val() + '&Rand=' + (Math.random()*10000),
type: 'GET',
这是我脚本中的示例代码。它只是搜索一个用户名并返回它是否被采用。我们如何通过Javascript发送令牌并在username.php上验证它?谢谢
答案 0 :(得分:0)
如果您知道如何使用提交按钮在表单上执行此操作,那就不一样了。 令牌生成必须在服务器上完成,并存储,无论如何。
即使你使用的是Javascript,你也在使用PHP来输出包含javascript代码的页面吗?
所以下面是一个非常快速的代码示例:
输出javascript的PHP文件的代码:
<?
$token = md5( mt_rand() . session_id() );
$_SESSION['token:'.$token] = true;
?>
你的javascript:
dataType: "text",
url: '/username.php',
data: 'username=' + $('#username').val() + '&token=' + '<?=$token?>',
type: 'GET',
您的username.php:
if ( $_SESSION["token:".$_POST["token"]] == true ){
exit();
} else {
unset($_SESSION["token:".$_POST["token"]]);
}
请注意,上面的示例存在一些问题,例如“当您多次打开同一页面时令牌将会更新”,而不是。因此,它不是准备用于生产的代码。 [更新]我更新了代码以解决“令牌将续订...”问题。
但是你明白了。
在服务器上生成令牌,在您的JavaScript中使用令牌,然后在username.php
中对其进行评估。
P.S。如果您的javascript是外部脚本文件,只需将其作为全局变量加载到您加载javascript的页面上,并使用外部javascript文件中的变量。