如果不设置表单令牌,很容易导致CSRF(跨站请求伪造)、跨站提交表单。
表单令牌是一种非常实用的技术,它在表单的视图部分生成随机令牌,默认为随机的MD5串,存在hidden的input中。在表单数据提交前,将提交的数据与SESSION中存放的令牌进行比对,从而判断是否是跨站提交。
ThinkPHP中开启表单令牌的方式比较简单,在config中进行配置:
'TOKEN_ON' =>TRUE,
'TOKEN_NAME' =>'__hash__',
这时,如果再运行页面,可以看到页面中已经有了随机的令牌:
<input type="hidden" name="__hash__" value="11f6b3285bf71a87811c3dadccb7b166_c6694a7c3a76bbf9ac7bf66a77d87310" /></form>
再用户提交时,进行比对:
if(!$tbAdmin->autoCheckToken($_POST)){
echo "Invalid form input.";
}
上面的tbAdmin是model。