php表单加入Token防止重复提交的方法-php教程

资源魔 28 0
Token浅谈

Token,就是令牌,最年夜的特性就是随机性,不成预测。普通黑客或软件无奈猜想进去。

那末,Token有甚么作用?又是甚么原理呢?

Token普通用正在两个中央——避免表单反复提交、anti csrf攻打(跨站点申请捏造)。

二者正在原理上都是经过session token来完成的。当客户端申请页面时,效劳器会天生一个随机数Token,而且将Token搁置到session傍边,而后将Token发给客户端(普通经过结构hidden表单)。下次客户端提交申请时,Token会跟着表繁多起提交到效劳器端。

而后,假如使用于“anti csrf攻打”,则效劳器端会对Token值进行验证,判别能否以及session中的Token值相等,若相等,则能够证实申请无效,没有是捏造的。

不外,假如使用于“避免表单反复提交”,效劳器端第一次验证相反当时,会将涩session中的Token值更新下,若用户反复提交,第二次的验证判别将失败,由于用户提交的表单中的Token没变,但效劳器端session中Token曾经扭转了。

下面的session使用绝对平安,但也叫繁琐,同时当多页面多申请时,必需采纳多Token同时天生的办法,这样占用更多资本,执行效率会升高。因而,也可用cookie存储验证信息的办法来替代session Token。比方,应答“反复提交”时,当第一次提交后便把曾经提交的信息写到cookie中,当第二次提交时,因为cookie曾经有提交记载,因而第二次提交会失败。

不外,cookie存储有个致命弱点,假如cookie被挟制(xss攻打很容易患到用户cookie),那末又一次gameover。黑客将间接完成csrf攻打。

<?php
/*
* PHP简略行使token避免表单反复提交
* 此解决办法纯正是为了给初学者参考
*/
session_start();
function set_token() {
  $_SESSION['token'] = md5(microtime(true));
}
function valid_token() {
  $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false;
  set_token();
  return $return;
}
//假如token为空则天生一个token
if(!isset($_SESSION['token']) || $_SESSION['token']=='') {
  set_token();
}
if(isset($_POST['test'])){
  if(!valid_token()){
    echo "token error";
  }else{
    echo '胜利提交,Value:'.$_POST['test'];
    echo "<br/>";
    echo "token:".$_SESSION['token'];
  }
}
?>
<form method="post" action="">
  <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>">
  <input type="text" name="test" value="Default">
  <input type="submit" value="提交" />
</form>

保举学习:PHP视频教程

以上就是php表单退出Token避免反复提交的办法的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!