我已经找到了像this这样的链接/答案,解释了如何生成令牌以及如何使用它。
我的网站正在使用Smarty,并且已经有很多表格。我试图找到一种方法在每个请求的标头内发送一个令牌,并捕获所有请求以验证标头。
例如:在AngularJS中,我可以使用$httpProvider.interceptors
和headers['Authorization'] = 'Bearer ' + token;
我想创建像这样的东西
class Interceptor {
$token;
function __construct(type) {
switch (type) {
case 'beforeSending':
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
$_SERVER['HTTP_authorization'] = 'Bearer ' + $token;
break;
case 'beforeExecuting':
if(hash_equals($_SESSION['token'], $_POST['token'])){
//continue
}else{
//error redirect to homePage or logout
}
break;
}
}
}
这应该将会话中存储的令牌添加到每个请求的标头中。
这也应检查每个请求是否包含正确的令牌。
有没有办法在全球范围内实现这一目标,而不是在每个表单中添加输入并检查每个调用?
答案 0 :(得分:0)
嗯,有几种方法,但是要对令牌进行适当的审查,更好的解决方案是在登录时生成它(通过会话),然后存储或通过表单推送它(所以你有一些东西要匹配它,或者如果令牌本身并不重要,只要它就在那里,在允许处理脚本继续之前检查一个令牌是否存在。
有几种方法可以做到这一点,但只要你在登录时创建会话令牌,并且存储在服务器上,你需要在处理脚本上做的就是这样:
<?php
//check to see if session is started
if (!session_id()) { session_start(); };
if (isset($_SESSION['token'])) {
//process the rest of the form
}
?>