php表单参加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防止反复提交的办法的具体内容,更多请关注百分百源码网其它相关文章!