PHP - Smarty - Http请求拦截器

时间:2017-03-07 09:13:51

标签: php smarty smarty3

我已经找到了像this这样的链接/答案,解释了如何生成令牌以及如何使用它。

我的网站正在使用Smarty,并且已经有很多表格。我试图找到一种方法在每个请求的标头内发送一个令牌,并捕获所有请求以验证标头。

例如:在AngularJS中,我可以使用$httpProvider.interceptorsheaders['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;
        }
    }
}

这应该将会话中存储的令牌添加到每个请求的标头中。

这也应检查每个请求是否包含正确的令牌。

有没有办法在全球范围内实现这一目标,而不是在每个表单中添加输入并检查每个调用?

1 个答案:

答案 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
 }
 ?>