PHP接口数据安全解决方案(二)

jwt生成token 1 基于传统的session认证 http本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还再一次进行用户认证。因为根据http协议,我们不知道是哪个用户发出的请求,所以为了能让我们应用识别是哪一个用户发出的请求,我们只能在服务器端存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器。告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的用户就能识别是哪一个用户了,这就是传统的基于session认证。 当... 阅读详情

前言

JWT是什么
JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。
它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。

本实例是使用github开源项目来实现,项目地址为
点击查看源jwt项目代码

怎么使用jwt项目?

  • 1.阅读GitHub上项目文档说明
  • 2.composer安装jwt(composer require lcobucci/jwt)
  • 3.引用vendor中autoload.php文件实现jwt类自动加载

实例演示token签名并创建token

<?php
include "./vendor/autoload.php";
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;

$time = time();
$token = (new Builder())->setHeader('alg','HS256')
//配置发行者
->setIssuer("jwtTest")
//配置Audience
->setAudience("php")
//配置令牌发出的时间(签发时间)
->setIssuedAt($time)
//配置令牌该时间之前不接收处理该Token
->setNotBefore($time+60)
//配置令牌到期的时间
->setExpiration($time + 7200)
//配置一个自定义uid声明
->set('uid',20)
//使用sha256进行签名,密钥为123456
->sign(new Sha256(),"123456")
//获取token
->getToken();
// echo $token;
//获取设置所有header头
$headers = $token->getHeaders();    
//获取所有的配置
$claims = $token->getClaims();

$alg = $token->getHeader('alg');
$iss = $token->getClaim('iss');
$aud = $token->getClaim('aud');
$iat = $token->getClaim('iat');
$exp = $token->getClaim('exp');
$nbf = $token->getClaim('nbf');
$uid = $token->getClaim('uid');

echo "=====下面是设置的header头信息======<br/>";
echo "当前token的alg盐值为{$alg}<br/>";

echo "=====下面是所有配置信息<br/>";
echo "当前token的发行者是:{$iss}<br/>";
echo "当前token的Audience是:{$aud}<br/>";
echo "当前token的令牌发出时间是:{$iat}<br/>";
echo "当前token不接收处理的时间为:{$nbf}<br/>";
echo "当前token的到期时间:{$exp}<br/>";
echo "当前token的uid是:{$uid}<br/>";
echo "当前token字符串为:{$token}";

结果展示:

=====下面是设置的header头信息======
当前token的alg盐值为HS256
=====下面是所有配置信息
当前token的发行者是:jwtTest
当前token的Audience是:php
当前token的令牌发出时间是:1563246935
当前token不接收处理的时间为:1563246995
当前token的到期时间:1563254135
当前token的uid是:20
当前token字符串为:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqd3RUZXN0IiwiYXVkIjoicGhwIiwiaWF0IjoxNTYzMjQ2OTM1LCJuYmYiOjE1NjMyNDY5OTUsImV4cCI6MTU2MzI1NDEzNSwidWlkIjoyMH0.O8tscKPweCvSaXkOVbmhtEcsJ7BWRxRn9s_xXFstgsE

解析token并校验token合法性

<?php
include "./vendor/autoload.php";
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;

//解析token
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqd3RUZXN0IiwiYXVkIjoicGhwIiwiaWF0IjoxNTYzMjQ2Mjc4LCJuYmYiOjE1NjMyNDYzMzgsImV4cCI6MTU2MzI1MzQ3OCwidWlkIjoyMH0.1XSZW6aWrHplAlMPMpc1K5gKdpWYE7AMa6T7qhBTF30';

//解析后的token对象
$decodeToken = (new Parser())->parse((string) $token);
$uid = $decodeToken->getClaim('uid');
$exp = $decodeToken->getClaim('exp');
$time = time();
echo "当前时间为:{$time}<br/>";
$result = $decodeToken->verify(new Sha256(),"123456");

//对token进行发行者和audience的校验
$data = new ValidationData();
$data->setAudience("php");
$data->setIssuer("jwtTest");
$resultVali =  $decodeToken->validate($data);
// print_r($resultVali);

//判断token签名和校验发行者是否合法
if($result && $resultVali){
    //如果设置的token有效时间大于当前时间则表示token过期了
    if($time>$exp){
        echo "该token已经过期了<br/>";    
    }else{
        echo "该token是合法的uid为:{$uid},过期时间为{$exp}<br/>";
    }
}else{
    echo "该token不合法签名错误或发行者不合法<br/>";
}

运行后结果为:

当前时间为:1563248373
该token是合法的uid为:20,过期时间为1563253478

类库封装管理jwt实例

<?php
include "./vendor/autoload.php";
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;
use Lcobucci\JWT\Claim\GreaterOrEqualsTo;
use Lcobucci\JWT\Token;

/**
 * Class JwtAuth
 * @package App\Library
 * @desc jwt接口鉴权类处理
 */
class JwtAuth{
    //jwt token
    private $token;
    /**
     * @var 用户传递的decode token
     */
    private $decodeToken;
    private static $_instance;
    private $iss = "jwtTest";
    private $aud = "php";
    private $uid;
    private $serect = "123456";
    private $exp;//token失效时间
    const EXP = 60;//token有效时间一个月

    /**
     * JwtAuth constructor.
     * 私有化construct方法
     */
    private function __construct()
    {
    }

    /**
     * 私有化clone方法
     */
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    /**
     *  获取jwtauth类实例化对象
     */
    public static function getInstance(){
        if(!(self::$_instance instanceof JwtAuth) ){
            self::$_instance = new JwtAuth();
        }
        return self::$_instance;
    }

    /**
     * 获取token
     * @return string
     */
    public function getToken(){
        return (string)$this->token;
    }

    /**
     * 设置token
     * @param $token
     * @return $this
     */
    public function setToken($token){
        $this->token = $token;
        return $this;
    }

    /**
     * 设置uid
     * @param $uid
     * @return $this
     */
    public function setUid($uid){
        $this->uid = $uid;
        return $this;
    }

    /**
     * 获取uid
     * @return mixed
     */
    public function getUid(){
        return $this->uid;
    }

     /**
     * 获取exp
     * @return mixed
     */
    public function getExp(){
        return $this->exp;
    }

    /**
     * 编码jwt token
     */
    public function encode(){
        $time = time();
        $this->token = (new Builder())->setHeader('alg','HS256')
            ->setIssuer($this->iss)
            ->setAudience($this->aud)
            ->setIssuedAt($time)
            ->setExpiration($time + self::EXP)
            ->set('uid',$this->uid)
            ->sign(new Sha256(),$this->serect)
            ->getToken();
        return $this;
    }

    /**
     * 解析传递的token
     * @return 用户传递的decode
     */
    public function decode(){
        if(!$this->decodeToken){
            // Parses from a string
            $this->decodeToken = (new Parser())->parse((string) $this->token);
            $this->uid = $this->decodeToken->getClaim('uid');
            $this->exp = $this->decodeToken->getClaim('exp');
//            error_log('exp:'.$this->decodeToken->getClaim('exp'));
//            error_log('uid:'.$this->decodeToken->getClaim('uid'));
        }
        return $this->decodeToken;
    }

    /**
     * verify校验token signature串第三个字符串
     * @return mixed
     */
    public function verify(){
        $result = $this->decode()->verify(new Sha256(),$this->serect);
        return $result;
    }

    /**
     * 校验传递的token是否有效,校验前两个字符串
     * @return mixed
     */
    public function validate(){
        $data = new ValidationData();
        $data->setAudience($this->aud);
        $data->setIssuer($this->iss);
        return $this->decode()->validate($data);
    }

}

/*
@desc 模拟登录返回token
 */
$jwtAuth = JwtAuth::getInstance();
$uid = 20;
$token = $jwtAuth->setUid($uid)->encode()->getToken();
echo "当前已经为您生成最新token:{$token}<br/>";


/*
1.解析token
2.校验token签名是否合法
3.验证token发行者等信息是否合法
4.校验token是否过期
 */
$token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqd3RUZXN0IiwiYXVkIjoicGhwIiwiaWF0IjoxNTYzMjY4NjExLCJleHAiOjE1NjMyNjg2NzEsInVpZCI6MjB9.PeEA3xTE2lKl4YCYQ2cjHSNYsrJ24HRnW1-yKM-LgHc';
$jwtAuth2 = JwtAuth::getInstance();
$jwtAuth2->setToken($token);
if($jwtAuth2->validate() && $jwtAuth2->verify()){
    //初始化用户id
    $uid = $jwtAuth2->getUid();
    $exp = $jwtAuth2->getExp();
    echo "token合法,您当前的uid为:{$uid},当前时间戳为:".time()."token有效时间为:{$exp}<br/>";
}else{
    echo "token校验失败,token签名不合法,或token发行者信息不合法<br/>";
}

演示结果为

当前已经为您生成最新token:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqd3RUZXN0IiwiYXVkIjoicGhwIiwiaWF0IjoxNTYzMjY4NjIzLCJleHAiOjE1NjMyNjg2ODMsInVpZCI6MjB9.BrsVElhVkTIq5xH3-JpvqvawNhDALb98VYZGbMTzWV8
token合法,您当前的uid为:20,当前时间戳为:1563268623token有效时间为:1563268671
当前已经为您生成最新token:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqd3RUZXN0IiwiYXVkIjoicGhwIiwiaWF0IjoxNTYzMjY4NzA1LCJleHAiOjE1NjMyNjg3NjUsInVpZCI6MjB9.juTM5iG8LNDid8Sp4jOjtHeTitaIB2WxZeW3GjnQrB0
token校验失败,token签名不合法,或token发行者信息不合法
ctfhub 技能树 JSON Web Token 修改签名算法 1、题目提示:有些JWT库支持多种密码算法进行签名、验签。若目标使用非对称密码算法时,有时攻击者可以获取到公钥,此时可通过修改JWT头部的签名算法,将非对称密码算法改为对称密码算法,从而达到攻击者目的。 2、打开题目看到题目给的源码,源码如下, <?php require __DIR__ . '/vendor/autoload.php'; use \Firebase\JWT\JWT; ​ class JWTHelper { public static function encode($pay 阅读详情

相关推荐

使用EggJS开发接口(三)登录验证之egg-jwt 及 crypto加密

egg-jwt是一个生成token的插件 token的规则: 服务器返回的token数据基本结构是Header.Payload.Signature,header、payload、signature三部分以'.'隔开。 例如: 1 2 3 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJ1c2VyTmFtZSI6ImNlc2hpemhhbmdodTAyIiwiaWF0IjoxNTU1MjEyMzg1LCJle...

ximenxiafeng的专栏 1万+

JWT的使用

概述 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 虽然 JWT 可以加密以在各方之间提供保密性,但我们将专注于签名令牌。签名的令牌可以验证其中包含的声明的完整性,而加密的令牌会向其他方隐藏这些声明。当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是签

陆沉的博客 9967

PHP接口加密的重要性与实现策略

通过采用HTTPS协议、API密钥认证、请求签名和数据加密传输等加密策略,我们可以有效地保护接口的安全性,防止数据泄露和恶意攻击。基于这种情况,我们还需要注意定期更新加密算法和密钥,以及加强对接口访问权限的控制和管理,从而进一步提高Web应用程序的安全性。在当今日益复杂的网络环境中,数据的安全性和隐私保护显得尤为重要。对于使用PHP进行Web开发的工程师来说,确保接口的安全性是保障数据完整性和用户隐私的重要一环。本文将详细讨论PHP接口加密的重要性,并探讨几种常见的加密策略及其实现方法。

2401_85969422的博客 510

SpringBoot集成Jwt(详细步骤+图解)

SpringBoot集成Jwt(详细步骤+图解) Jwt简介 JSON Web Token是目前最流行的跨域认证解决方案,,适合前后端分离项目通过Restful API进行数据交互时进行身份认证 Jwt构成(.隔开) eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MTkxNjQ4NjEsInVzZXJuYW1lIjoiYWRtaW4ifQ.fo5a-H_C7XG3fSnNdCEMzM2QmrF5c7yypzoSxGzgJOo Header(头部):放有签名

撸码社区的博客 3万+

玉米群体遗传分析实战:如何用IQtree和VCF文件快速构建系统发育树(附避坑指南)

本文详细介绍了如何利用IQtree和VCF文件进行玉米群体遗传分析,并快速构建可靠的系统发育树。文章重点解析了从VCF格式转换到PHYLIP格式的实用技巧,强调了使用ASC模型校正SNP数据偏差的重要性,并提供了完整的参数设置、常见报错解决方案及结果评估指南,帮助研究者高效完成分析并规避常见陷阱。

leaf8的博客 607

1.3、云计算HCIP融合存储产品及部署

目标:描述Oceanstor V3系列存储产品系统组成及产品定位 描述Oceanstor V3硬件结构及软件架构 掌握存储系统与主机系统之间的连接 一、存储型号 低端型存储:Oceanstor 2200 2600 2800 V3/V5 终端型存储:Oceanstor 5300 5500 5600 5800 6800 V3/V5 高端型存储:Oceanstor 18000 二、Oceanstor V3系列存储系统定位 OceanStor V3系列存储系统是华为根据存储产品应用现状和存储

weixin_43666279的博客 1653

php接口数据安全解决方案(二)

php接口数据安全解决方案(二)

qq_38472535的博客 75

STM32(H7)学习记录-14 XSPI连接DDR SDRAM(HyperBus)

主控芯片是STM32H7S7 ,HyperBusRAM芯片是W956D8MBYA5I。*DQS0(这个引脚是作为RWDS)使用的CubeMX版本是6.13.0。

m0_71918616的博客 1073

aud to php,php接口数据安全解决方案(二)

前言JWT是什么JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法。它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA...

weixin_42502811的博客 294

《详细指南:本地部署Ollama大型模型的完整步骤》

通过本指南,您应该能够成功地在本地部署Ollama大型模型,并开始使用它进行各种AI任务。Ollama的易用性和高性能使其成为研究和开发的理想选择。Ollama是一个高性能的AI模型部署平台,支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama,并运行一个大型模型。

eclipsercp的博客 3696

POCV/SOCV 、LVF的差别

1.POCV与OCV、AOCV 为了模拟片上PVT的差异带来的影响,最早提出了OCV(On Chip Variation)给每个cell都设置一个固定的derate值,来覆盖最悲观的情况,但是随着工艺发展,设计规模增大,OCV过度的悲观开始限制性能,于是又有了AOCV(Advanced On Chip Variation),用基于depth和distance的derate来取代单一的全局的derate值,但时序收敛的过程中逻辑级数depth的变化让时序分析的时间变得非常长,由此POCV诞生了。 POCV

m0_61544122的博客 5363

PHP如何保证接口数据安全

说起来,关注PHP接口数据的安全性是保护用户隐私的需要。通过加强输入验证和过滤、使用HTTPS协议进行数据传输、限制接口访问权限以及定期更新和维护等措施,我们可以有效地提高PHP接口数据的安全性。因此,我们还需要持续关注安全技术的发展和变化,不断完善和优化我们的安全措施,确保用户数据的安全和系统的稳定。特别是在Web开发中,接口数据的安全性直接关系到系统的稳定性和用户信息的安全。第一印象往往会变化,如何保证PHP接口数据的安全性,却是一个值得我们深入探讨的问题。二、是什么:PHP接口数据安全性的挑战。

m0_60591287的博客 427

QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)

一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.csdn.net/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL..

7660

【转载】[php接口数据安全解决方案(一)

php接口数据安全解决方案(一) 前言 目录介绍 登录鉴权图 接口请求安全性校验整体流程图 代码展示 演示用户登录 演示获取用户信息 文章完整代码地址 后记 前言 目的: 1.实现前后端代码分离,分布式部署 2.利用token替代session实现状态保持,token是有时效性的满足退出登录,token存入redis可以解决不同服务器之间session不同步的问题,满足分布式部署 3.利用sign,前端按照约定的方式组合加密生成字符串来校验用户传递的参数跟后端接收的参数是否一直,保障接口数据传递的安全 4.

wengezi的博客 432

YOLO模型轻量化实战:剪枝、量化与知识蒸馏三大技术落地详解

这篇文章结合我自己的实战经验,从原理、操作、效果、避坑四个方面,给大家讲清楚了YOLO模型轻量化的三大核心技术:剪枝、量化、知识蒸馏。先明确应用场景,再选择合适的技术组合,不要盲目追求极致压缩,要在“大小、速度、精度”之间找平衡。实战才是最好的学习方式——大家可以先拿自己的数据集试试剪枝和量化,感受一下效果,有问题可以在评论区留言。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 592

【回眸】Tessy集成测试软件使用指南(一)新手使用篇

这个专栏的文章前4篇都在记录如何使用Tessy进行单元测试,集成测试需要有一定单元测试基础,且做集成测试之前,需要做好单元测试,否则将会大幅增加软件单元代码纠错的代价。集成测试所花费的时间通常远远超过单元测试。如果直接从单元测试到系统测试,结果往往是不理想的。集成测试可以检测由于单元相互交互而导致的错误,通常由一组专业的测试人员执行。

啤酒鸭的物联网开发记录博客 5280

php 接口安全解决方案,PHP 接口数据安全解决方案 (一)

PHP 接口数据安全解决方案 (一)前言目录介绍登录鉴权图接口请求安全性校验整体流程图代码展示演示用户登录演示获取用户信息文章完整代码地址后记前言目的:1. 实现前后端代码分离, 分布式部署2. 利用 token 替代 session 实现状态保持, token 是有时效性的满足退出登录, token 存入 Redis 可以解决不同服务器之间 session 不同步的问题, 满足分布式部署3. 利...

weixin_35652131的博客 354

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

php 接口安全解决方案,php接口数据安全解决方案(一)

前言目的:1.实现前后端代码分离,分布式部署2.利用token替代session实现状态保持,token是有时效性的满足退出登录,token存入redis可以解决不同服务器之间session不同步的问题,满足分布式部署3.利用sign,前端按照约定的方式组合加密生成字符串来校验用户传递的参数跟后端接收的参数是否一直,保障接口数据传递的安全4.利用nonce,timestamp来保障每次请求的生成s...

weixin_39756273的博客 277

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PHP数据安全问题的深入探讨

要解决这个问题,我们需要从多个方面入手,提高开发者安全意识、严格验证和过滤用户输入、使用参数化查询、启用HTTPS协议以及合理配置系统等。只有这样,我们才能确保PHP数据的安全性,为用户提供更加可靠和稳定的服务。从这个角度出发,我们也需要不断关注网络安全威胁的动态变化,及时更新和完善我们的安全策略和措施。PHP数据安全问题主要体现在以下几个方面:这个问题的关键是,数据在传输过程中可能被拦截和篡改,导致数据泄露或完整性受损;本文将详细讨论PHP数据安全问题,分析其成因,并探讨相应的解决策略。

A150922923282的博客 409

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【亲测免费】 V免签PHP二开版源码:打造灵活高效的支付解决方案

V免签PHP二开版源码:打造灵活高效的支付解决方案 【下载地址】V免签PHP二开版源码 V免签PHP二开版源码欢迎使用V免签PHP二开版源码!本源码是专为开发者设计的一款基于PHP语言的二次开发版本,旨在提供一个灵活、高效且易于定制的解决方案 ...

gitblog_09708的博客 943

php接口数据安全解决方案(一)

php接口数据安全解决方案(一)

asdfgh0077的博客 151

PHP8 解决方案(二)

includerequire都做基本相同的事情,为什么有四个?根本的区别在于,include试图继续处理您的脚本,即使它找不到指定的文件,而require在强制意义上使用:如果文件丢失,PHP 引擎停止处理并抛出致命错误。实际上,这意味着如果你的页面在没有外部文件的情况下仍然可用,你应该使用include。如果页面依赖于外部文件,使用require。另外两个命令和防止同一个文件在一个页面中被多次包含。试图在脚本中多次定义函数或类会触发致命错误。因此或。

龙哥盟 1484

PHP API接口开发实例的探讨

在当今信息化快速发展的时代,API(应用程序编程接口)已成为不同系统间数据交互的桥梁。本文将以一个具体的PHP API接口开发实例为基础,探讨其设计思路、实现过程及重要意义。第一印象往往会变化,PHP API接口开发在现代化软件开发中具有重要意义。通过合理设计和实现API接口,可以提高系统的可维护性、可扩展性、数据共享和整合能力,同时提高开发效率和保障数据安全。在开发PHP API接口之前,我们首先需要明确接口的需求和功能。三、PHP API接口开发的重要意义。二、PHP API接口实现过程。

2401_86114608的博客 1055

PHP数据安全的物理层实现是怎样的?

输入过滤:检查进入城堡的每个人,不让坏人混进来;数据加密:把宝藏(敏感数据)藏在加密盒子里,即使盒子被偷,坏人也打不开;输出编码:审查要发布的公告,确保里面没有危险信息。通过这三道防线,你的PHP应用就能有效抵御常见的安全威胁,保护用户数据安全!

长风破浪会有时的博客 485

PHP接口数据安全解决方案(一)

前言 目录介绍 登录鉴权图 接口请求安全性校验整体流程图 代码展示 演示用户登录 演示获取用户信息 文章完整代码地址 后记 前言 目的: 1.实现前后端代码分离,分布式部署 2.利用token替代session实现状态保持,token是有时效性的满足退出登录,token存入redis可以解决不同服务器之间session不同步的问题,满足分布式部署 3.利用sign,前端按照约定的方式组合加密生成字符串来校验用户传递的参数跟后端接收的参数是否一直,保障接口数据传递的安全 4.利用no

withoutfear的博客 1049
上一篇: PHP接口数据安全解决方案(一)
下一篇: PHP类库自动加载的七种方式(三)
withoutfear
博客等级 码龄13年 541粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值