博客 (71)

前面写过一篇文章介绍了不买高防 IP,照样抵挡 DDoS 攻击(IP 篇),如果攻击的是域名(CC),那么...


本文适用场景:攻击的是 web 网址而非 IP,来源有许多各地的 IP 地址,每个 IP 地址每小时只有若干请求,但整个网站每分钟有数万请求量。


《小白鼠A》(贵)

阿里云有一款产品叫“Web 应用防火墙”,开通并接入云产品,试用按量付费即可。

在防护配置-Web核心防护 中可配置各种规则,譬如:

“自定义规则”可添加网址/UA/IP/Cookie/等中包含某些关键词的请求;

“区域封禁”可按地区来限制请求;

另外还有“CC防护”等各种实用规则。

添加规则后记得关联实例。

配置完成后可在总览页面查看请求情况,如果攻击停止可关闭防火墙。

试用了12小时,平均每分钟请求2-5万次,消耗 15000SeCU,费用大概是750元。


《小白鼠B》(推荐)

阿里云有一款产品叫“边缘安全加速 ESA”,开通接入域名(注意填写域名时不要写 www)。

创建购买成功后会有一个 CNAME 域名,解析生效。配置 HTTPS 证书。

打开“我正在遭受攻击”,开启后站点进入严格防护模式,默认对所有 HTTP 请求做滑块挑战。这是非常能节省费用的操作,实测开启与不开启的数量相差20倍(具体视攻击强弱)。

另外,ESA 自带的“安全防护-WAF”中若想根据 URL 中包含某个关键词来拒绝请求,需要升级套餐。可以直接在“规则-重定向”设置 302 跳转也能达到类似的效果,但是节省流量的最好办法还是开启滑块。

费用的话,大部费用是由“客户端请求到边缘加速服务器的流量”和“边缘加速服务器响应给客户端的流量”组成的,而且滑块页面不计入流量。可免费试用。

在开启滑块的情况下,1分钟产生10M流量,基础版包含的50GB可以用3天。标准版(500GB)375元可以用一个月。(以我站实测为例,各站情况不同)。

具体费用在“计费管理-套餐管理-套餐总量 (月)-image.png”查看。超过套餐的流量会使用CDN流量包抵扣。

ECS 获取客户端 IP 的问题有两种解决方案,1. 设置四层代理分析(企业版),2. 设置重定向规则,重定向到直接解析到该网站的另一个域名。

为了尽量减少滑块对用户体验的影响,建议加白名单:ESA-站点-安全防护-WAF-白名单规则,譬如添加省份规则,跳过全部规则(包括滑块)。

其它问题:滑块会拒绝蜘蛛?

其它相似产品:Cloudflare、腾讯云 EdgeOne。


----------------下面是停站维护时显示临时页面的做法----------------

被攻击期借用阿里云 OSS/CDN 显示“维护中”页面的方法。

1.

首先让 AI 快速生成一个维护中的页面,上传到 OSS。

虽然这个文件有一个对应的 CDN 链接,但是域名解析使用“显性 URL”模式并不能正常访问到这个页面。

2.

在阿里云 CDN 添加一个域名(也就是网站域名),会生成一个 CNAME 域名,网站域名 CNAME 到这个域名上。

配置这个 CDN 域名的 OSS 实例、HTTPS 等信息。

这样生效后,访问网站域名就能请求到这个 OSS 上了。

3.

但是它并不像网站一样有默认文档,需要添加重写规则。

打开 CDN-域名管理-缓存配置-重写访问URL,添加,添加重写规则。

例:如果目标页面路径是 https://域名/index.html,那么重写规则就是:

^/(?!.*index\.html$).*$

也就是把所有除 /index.html 以外的路径全部重写到 /index.html。

4.

下一步只要观察这个域名的实时流量和带宽,如果攻击停止了,将域名解析回 ECS。

CDN-统计分析-实时监控-访问数据-选择域名-查询。

xoyozo 7 天前
113

目标: 在运行 HarmonyOS Next 的华为 MateBook Pro 上侧载安装第三方应用程序。

注:本教程同样适用于在运行 HarmonyOS Next 的华为手机上侧载安装第三方应用程序。

所需准备

  1. 一台运行 HarmonyOS Next 的华为 MateBook Pro

  2. 一台 Windows 电脑

  3. 一根数据线

    • USB-A to Type-C

    • 或 Type-C to Type-C (确保能将两台电脑连接)。

  4. 网络连接:两台电脑需在同一局域网下(用于无线调试连接)。

步骤详解

第一步:鸿蒙 PC (MateBook Pro) 端设置 (启用开发者模式与调试)

  1. 连接设备: 使用数据线将鸿蒙 MateBook Pro 连接到 Windows 电脑。

  2. 打开设置: 在鸿蒙 PC 上,进入 设置

  3. 进入关于本机: 在设置中,找到并点击 关于本机 或您的 电脑型号

  4. 启用开发者模式

    • 在“关于本机”界面,找到 软件版本 或 HarmonyOS 版本

    • 连续点击 软件版本/HarmonyOS 版本 文字 5 次以上

    • 系统会提示“您已处于开发者模式”或提示重启进入开发者模式。按提示重启电脑(如果需要)。

  5. 打开开发者选项

    • 重启后,回到 设置 -> 系统 -> 开发者选项 (路径可能略有不同,在“系统和更新”或“隐私与安全”下查找)。

  6. 启用 USB 调试

    • 在开发者选项中,找到 USB 调试,将其开启

    • 首次开启时,可能会弹出提示(连接线后或稍后操作时),点击 允许

    • 注意提示:系统可能提示“Matebook Pro 上的右上角的 Type-C 口可以进行调试”,确保使用正确的接口连接调试线。如果弹出“始终允许本机调试”选项,勾选并允许

  7. 启用并记录无线调试信息

    • 在开发者选项中,找到 无线调试,将其开启

    • 开启后,系统会显示一个 IP 地址和端口号(例如 192.168.x.x:xxxxx)。务必准确记下这个 IP 地址和端口号,后续在 Windows 端连接时必须用到。

    • 至此,鸿蒙 PC 端的准备工作完成。

第二步:Windows 电脑端操作 (使用小白调试助手)

  1. 获取工具和 HAP 包

    • 访问包含 HarmonyOS Next 可用 HAP 包的资源(如 GitHub 上的相关仓库,搜索 “HarmonyOS Next HAP”)。

    • 下载小白调试助手

      • 在工具仓库中找到 小白调试助手 或类似名称。

      • 点击 Latest (最新版本)。

      • 点击 Download 下载其 Windows 版压缩包(.zip 文件)。

    • 下载目标应用的 HAP 包(以 ClashBox 为例,你也可以使用自己已有的 .hap 文件):

      • 在应用仓库中找到 ClashBox

      • 同样点击 Latest -> Download 下载其 HAP 包(.hap 文件)。

  2. 准备小白调试助手

    • 将下载的小白调试助手压缩包解压到一个非中文且无空格路径的文件夹。

    • 进入解压后的文件夹,找到可执行文件。双击运行。根据 Windows SmartScreen 或安全软件提示(若有),选择 更多信息 -> 仍要运行

  3. 登录华为开发者账号 (强烈推荐)

    • 在小白调试助手界面,找到登录入口(通常在界面顶部或设置中),点击 登录

    • 使用您的华为开发者账号登录(登录时,您的华为手机可能会收到验证码,或在鸿蒙PC上验证)。

    • 输入验证码,并在授权请求页面点击 允许。登录成功后,界面通常会显示您的账号昵称或ID。

    • 重要: 开发者账号签发的应用证书有效期通常为 6 个月普通账号14 天。为方便使用,建议申请华为开发者账号。

  4. 连接鸿蒙设备

    • 在小白调试助手主界面,找到 连接设备添加设备 或类似功能的按钮并点击。

    • 在弹出的连接窗口(通常是输入IP和端口的对话框)中:

      • 输入您在鸿蒙 PC 上 无线调试 功能中记录的 IP 地址

      • 输入记录的 端口号

    • 点击 确定连接 或 OK

    • 连接成功:如果地址和端口输入正确,且鸿蒙 PC 的开发者选项已开启无线调试:

      • 鸿蒙 PC 可能弹出调试请求(“允许调试?”),勾选“始终允许”并点击 允许

      • 小白调试助手界面会显示“连接成功”或目标设备信息。

      • (若未弹出提示框但连接成功,也属正常)

第三步:安装第三方 HAP 包

  1. 选择 HAP 包

    • 确保设备已连接成功。

    • 在小白调试助手界面,找到 选择 HAP加载 HAP安装应用 或类似按钮(通常在文件菜单或主功能区)。

    • 点击该按钮,浏览文件系统,找到您下载好的目标 HAP 文件(如 ClashBox-xxx.hap),选中并点击 打开

  2. 开始安装

    • 选择好 HAP 文件后,小白调试助手界面通常会激活 开始调试安装 或 运行 按钮。

    • 点击 开始调试 或 安装

  3. 等待安装完成

    • 小白调试助手会开始处理 HAP 包:进行签名、推送到设备并安装。

    • 观察进度条或日志输出,耐心等待直至提示“安装成功”

第四步:在鸿蒙 PC 上使用安装的应用

  • 安装完成后,返回您的鸿蒙 MateBook Pro。

  • 在桌面或 开始菜单 中,查找您刚刚安装的应用图标(如 ClashBox)。

  • 点击图标即可启动使用该应用。

常见问题处理

  • 签名错误/证书问题:在小白调试助手内寻找 **清理缓存重置证书重新登录** 或类似选项。执行后,重新登录开发者账号,再尝试安装。确保登录的是开发者账号。

  • Java 环境报错:如果小白调试助手提示需要 Java 环境(如 java 命令未找到),按照其提示点击安装,它会引导下载并安装所需的 Java Runtime Environment (JRE)。

  • 连接失败

    • 检查鸿蒙 PC 的 无线调试 IP 和端口号是否变化(息屏、重启、网络切换可能导致变化),在开发者选项里重新确认并输入。

    • 确保两台电脑在同一局域网

    • 检查鸿蒙 PC 的 **USB 调试 和 无线调试 是否已开启**。

    • 尝试在鸿蒙 PC 的开发者选项中关闭再重新开启 无线调试,获取新的端口号。

  • 其他报错:查阅小白调试助手官方的使用说明或 GitHub 仓库的 Issue 区寻求解决方案。


xoyozo 7 个月前
36,535

IIS 中使用 HttpPlatformHandler 模块部署 python web 项目时遇到 502.3 网关错误

HTTP 错误 502.3 - Bad Gateway

There was a connection error while trying to route the request.

最可能的原因:

  • CGI 应用程序没有返回一组有效的 HTTP 错误。

  • 由于父网关中出现错误,充当代理或网关的服务器无法处理该请求。

可尝试的操作:

  • 使用 DebugDiag 排查 CGI 应用程序。

  • 确定此错误是否由代理或网关引起。

详细错误信息:

模块    httpPlatformHandler

通知    ExecuteRequestHandler

处理程序    httpplatformhandler

错误代码    见下方表格

详细信息:

当 CGI 应用程序未返回一组有效的 HTTP 头,或者代理或网关无法将请求发送至父网关时,便会出现此错误。您可能需要获取一个网络跟踪,或者与代理服务器管理员联系(如果不是 CGI 的问题)。

错误代码可能的错误原因
0x8007053d未安装相关组件库,建议执行命令:pip install -r requirements.txt
0x80070005

若显示配置错误“由于权限不足而无法读取配置文件”则是应用代码目录未配置相应用户的读取权限;

访问受限,请正确配置 IIS 中的网站凭据、应用程序池标识、项目目录“读取”、解释器目录“读取和执行”权限等

0x80072ee2执行超时,一般发生在批量读写的时候
0x8007042b
任何错误

查看日志文件。

可能的错误原因:

  • 编码问题:强制使用 utf-8


xoyozo 8 个月前
1,741
  1. 临界区与 lock 关键字

    核心作用:

    通过将多线程访问串行化,保护共享资源或代码段。lock 关键字是 Monitor 类的语法糖,提供异常安全的临界区实现。

    实现示例:

    // 创建私有静态只读对象
    // private static readonly object _lockObj = new object();
    private static readonly System.Threading.Lock _locker = new(); // .NET 9+ 推荐使用 Lock 类型,避免传统 object 的性能损耗
    
    public void ThreadSafeMethod()
    {
        lock (_lockObj) 
        {
            // 临界区代码(每次仅一个线程可进入)
        }
    }

    超时机制:

    高并发场景可结合 Monitor.TryEnter 设置超时,避免无限等待:


    if (Monitor.TryEnter(lockObject, TimeSpan.FromSeconds(1)))
    {
        try { /* 操作 */ }
        finally { Monitor.Exit(lockObject); }
    }

    关键特性:

    用户态锁(无内核切换开销)

    自动调用Monitor.Enter和Monitor.Exit

    必须使用专用私有对象作为锁标识

    注意事项:

    ❌ 避免锁定this、Type实例或字符串(易引发死锁)

    ❌ 避免嵌套锁(需严格按顺序释放)

    ✅ 推荐readonly修饰锁对象

    ❌ lock 不适用于异步代码(async/await),需使用 SemaphoreSlim 实现异步锁

    lock 示例

     

  2. 互斥锁(Mutex)

    核心作用:

    系统级内核锁,支持跨进程同步,但性能开销较高(用户态/内核态切换)。

    实现示例:

    using var mutex = new Mutex(false, "Global\\MyAppMutex");
    
    try 
    {
        // 等待锁(最大等待时间500ms)
        if (mutex.WaitOne(500)) 
        {
            // 临界区代码
        }
    }
    finally 
    {
        if (mutex != null)
        {
            mutex.ReleaseMutex();
        }
    }

    关键特性:

    支持跨应用程序域同步

    线程终止时自动释放锁

    支持命名互斥体(系统全局可见)

    适用场景:

    单实例应用程序控制

    进程间共享文件访问

    硬件设备独占访问

    Mutex 示例

     

  3. 信号量(Semaphore)

    核心作用:

    通过许可计数器控制并发线程数,SemaphoreSlim为轻量级版本(用户态实现)。

    实现对比:

    类型
    跨进程
    性能
    最大许可数
    Semaphore
    ✔️

    系统限制
    SemaphoreSlim


    Int32.Max

    代码示例:

    // 创建初始3许可、最大5许可的信号量
    var semaphore = new SemaphoreSlim(3, 5);
    
    semaphore.Wait();  // 获取许可
    try 
    {
        // 资源访问代码
    }
    finally 
    {
        semaphore.Release();
    }

    异步编程

    private readonly SemaphoreSlim _asyncLock = new(1, 1);
    public async Task UpdateAsync()
    {
        await _asyncLock.WaitAsync();
        try { /* 异步操作 */ }
        finally { _asyncLock.Release(); }
    }

    典型应用:

    数据库连接池(限制最大连接数)

    API 请求限流

    批量任务并发控制

    Semaphore 示例

     

  4. 事件(Event)

    核心机制:

    通过信号机制实现线程间通知,分为两种类型:

    类型
    信号重置方式
    唤醒线程数
    AutoResetEvent
    自动
    单个
    ManualResetEvent
    手动
    所有

    使用示例:

    var autoEvent = new AutoResetEvent(false);
    
    // 等待线程
    Task.Run(() => 
    {
        autoEvent.WaitOne();
        // 收到信号后执行
    });
    
    // 信号发送线程
    autoEvent.Set();  // 唤醒一个等待线程

    高级用法:

    配合WaitHandle.WaitAll实现多事件等待

    使用ManualResetEventSlim提升性能

    AutoResetEvent 示例

     

  5. 读写锁(ReaderWriterLockSlim)

    核心优势:

    实现读写分离的并发策略,适合读多写少场景(如缓存系统)。

    锁模式对比:

    模式
    并发性
    升级支持
    读模式(EnterReadLock)
    多线程并发读

    写模式(EnterWriteLock)
    独占访问

    可升级模式
    单线程读→写
    ✔️

    代码示例:

    var rwLock = new ReaderWriterLockSlim();
    
    // 读操作
    rwLock.EnterReadLock();
    try 
    {
        // 只读访问
    }
    finally 
    {
        rwLock.ExitReadLock();
    }
    
    // 写操作
    rwLock.EnterWriteLock();
    try 
    {
        // 排他写入
    }
    finally 
    {
        rwLock.ExitWriteLock();
    }

    最佳实践:

    优先使用ReaderWriterLockSlim(旧版有死锁风险)

    避免长时间持有读锁(可能饿死写线程)

    ReaderWriterLockSlim 示例

  6. 原子操作(Interlocked)

    原理:

    通过CPU指令实现无锁线程安全操作。

    常用方法:

    int counter = 0;
    Interlocked.Increment(ref counter);      // 原子递增
    Interlocked.Decrement(ref counter);      // 原子递减
    Interlocked.CompareExchange(ref value, newVal, oldVal);  // CAS操作

    适用场景:

    简单计数器

    标志位状态切换

    无锁数据结构实现

     

  7. 自旋锁(SpinLock)

    核心特点:

    通过忙等待(busy-wait)避免上下文切换,适用极短临界区(<1微秒)。

    实现示例:

    private SpinLock _spinLock = new SpinLock();
    
    public void CriticalOperation()
    {
        bool lockTaken = false;
        try 
        {
            _spinLock.Enter(ref lockTaken);
            // 极短临界区代码
        }
        finally 
        {
            if (lockTaken) _spinLock.Exit();
        }
    }

    优化技巧:

    单核CPU需调用Thread.SpinWait或Thread.Yield

    配合SpinWait结构实现自适应等待

     

  8. 同步机制对比指南

    机制
    跨进程
    开销级别
    最佳适用场景
    lock


    通用临界区保护
    Mutex
    ✔️

    进程间资源独占
    Semaphore
    ✔️

    并发数限制(跨进程)
    SemaphoreSlim


    并发数限制(进程内)
    ReaderWriterLockSlim


    读多写少场景
    SpinLock

    极低
    纳秒级临界区
    Interlocked
    -无锁
    简单原子操作

选择原则:

  1. 优先考虑用户态锁(lock/SpinLock/SemaphoreSlim)

  2. 跨进程需求必须使用内核对象(Mutex/Semaphore)

  3. 读写比例超过10:1时考虑读写锁

  4. 自旋锁仅用于高频短操作(如链表指针修改)

通过以上结构化的分类和对比,开发者可以更精准地选择适合特定场景的线程同步方案。建议在实际使用中配合性能分析工具(如BenchmarkDotNet)进行量化验证。

💡 ASP.NET 的异步编程(async/await)本质是单进程内的线程调度,不算“跨进程”。每个 IIS 应用程序池对应一个独立的工作进程(w3wp.exe),不同用户访问同一应用程序池下的 ASP.NET 网站,两者的请求均由同一个 w3wp.exe 进程处理。可能跨进程的场景有:Web Garden 配置、多应用程序池部署等。

在 C# 中,除了常规锁机制(如 lock、Mutex、Semaphore 等),还有一些内置类型通过内部锁或无锁设计实现线程安全。以下是常见的几类:

  1. 线程安全集合(System.Collections.Concurrent)这些集合通过细粒度锁或无锁算法(如 CAS)实现线程安全,适合高并发场景。

    • ConcurrentDictionary:分段锁机制,将数据分片存储,每个分片独立加锁,减少锁竞争。

    • ConcurrentQueue / ConcurrentStack基于原子操作(Interlocked)保证线程安全。

    • ConcurrentBag:每个线程维护本地存储,减少争用,适合频繁添加和移除的场景。

    • BlockingCollection:基于 ConcurrentQueue 和信号量(SemaphoreSlim)实现生产-消费者模式,支持阻塞和超时。

  2. 不可变集合(System.Collections.Immutable) 通过数据不可变性实现线程安全(无需锁),每次修改返回新对象。

  3. Lazy 的线程安全初始化(Lazy<T>) 通过锁或 Interlocked 确保延迟初始化的线程安全。

  4. 通道(System.Threading.Channels)用于异步生产-消费者模型,内部通过锁和信号量管理容量限制。

  5. 内存缓存(System.Runtime.Caching.MemoryCache)内部使用锁保护共享状态,确保线程安全。

  6. 原子操作类型(Interlocked 类、Volatile 关键字、Unsafe 类)通过 CPU 指令实现无锁线程安全。

  7. 其他同步工具(Barrier、CountdownEvent)虽然不是严格意义上的锁,但用于协调线程。

xoyozo 9 个月前
3,287
  1. 打开“任务计划程序”(taskschd.msc)

    image.png

  2. 点击右侧“创建任务”

    image.png

  3. 填写“名称”

    image.png

  4. “安全选项”根据实际情况设置

    如果选择“不管用户是否登录都要运行”,则启动成功后不会显示窗口(包括由该应用调起的其它应用,任务管理器中可见进程)

    如果选择“只在用户登录时运行”启动成功后会显示窗口,但系统重启后需要进入系统才能运行此计划

  5. “触发器”新建,勾选“重复任务间隔”选最短,“持续时间”无限期,并取消“任务的执行时间超过此值则停止执行”

    image.png

  6. “操作”新建,启动程序,浏览程序或脚本

    image.png

  7. “设置”请勿启动新实例(只判断它启动的实例,不判断手动打开的或开机启动的实例),其它选项按需设置

    image.png

  8. 设置完成

    image.png


设置完成后查看“上次运行结果”。

尚未运行,显示:(0xC000013A)

第一次运行,显示:正在运行任务。(0x41301)

从第二次起,显示:操作员或系统管理员拒绝了请求。(0x800710E0)


xoyozo 10 个月前
2,045
Tea.TeaException:“code: 400, Specified parameter Version is not valid. request id: ”

可能是 AlibabaCloud.OpenApiClient.Models.Config 的 Endpoint 配置错误。


Tea.TeaException:“code: 400, The parameter IpProtocol must be specified with case insensitive TCP, UDP, ICMP, GRE or All. request id: ”

必须指定 Permissions 参数。参考文档


Tea.TeaException:“code: 403, User not authorized to operate on the specified resource, or this API doesn't support RAM. request id: ”

前往 RAM 访问控制配置用户的权限。


Tea.TeaException:“code: 401, The specified security group is not authorized to operate. request id: ”

没有权限操作当前安全组。或者检查安全组的实例 ID 是否正确。


本文不定期更新。

xoyozo 10 个月前
1,267
  1. 一般地,在路由器上启用 UPnP 就可以了。

  2. 如果局域网中有多台监控设备,或有多层局域网,可以尝试直接端口映射。

  3. 在监控控制面板中查看主机 IP(注意不是各通道的 IP),或者在同一层局域网通过电脑浏览器中访问监控控制面板(http://主机ip)。

  4. 然后就可以在路由器上配置端口映射了(有些路由器的菜单项为“NAT 服务”)。

  5. 一般配置 554(RTSP 端口)和 8000(服务端口)就可以了,80(HTTP 端口)和 443(HTTPS 端口)用于通过浏览器管理监控系统,不需要在外网配置的话不需要映射,暴露在公网有安全风险。另外 9010(平台命令端口)和 9020(平台数据端口)作用未知,可不映射。

  6. 当然,为了防止端口冲突或提高安全性,映射的外部端口和内部端口可以不相同。

xoyozo 11 个月前
2,663

如果用后端代码实现,必须替换 \r\n、\r、\n 这些换行符为 <br />。

这时,如果前端绑定时是自动编码的,那么 <br /> 会直接显示出来,起不到换行效果。

如果前端绑定时是原文输出的,那么当数据源不可信时会引发 XSS 漏洞。

推荐一个既简单又安全的方法,用前端的 CSS 就能轻松实现:

<div style="white-space: pre-line">内容</div>

原理:CSS 的 white-space: pre-line 属性会保留换行符(\r\n或\n),自动渲染为可视换行,无需修改数据源且无安全风险。

xoyozo 11 个月前
816

Ollama 默认是仅本地访问,接口地址是:http://localhost:11434

开放外部访问需要设置两个环境变量:

OLLAMA_HOST=0.0.0.0
OLLAMA_ORIGINS=*


第一步,设置环境变量


macOS:

在终端中运行命令

launchctl setenv OLLAMA_HOST "0.0.0.0"
launchctl setenv OLLAMA_ORIGINS "*"


Windows:

打开“环境变量”配置框

添加两个用户变量:

image.png


Linux:

使用 systemctl 设置环境变量

调用 systemctl edit ollama.service 编辑 systemd 服务配置

在 [Service] 下方添加:

[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"


第二步,重启 Ollama


环境变量配置完成后,重启 Ollama。


第三步,开放防火墙端口


Windows:

进入“高级安全 Windows Defender 防火墙” → “入站规则” → 新建规则 → 允许 TCP 端口 11434。


第四步,验证


获取本机局域网 IP。

Windows:ipconfig

Linux/macOS:ifconfig


访问网址:http://<ip>:11434

若返回 Ollama is running 则表示连接正常。

xoyozo 1 年前
3,997

本文介绍 Token 认证和 HMAC 认证两种方式。


一、Token 接口认证方式

原理:

客户端使用账号密码等信息登录,服务器验证通过后生成一个 Token 发送给客户端。客户端在后续的请求中携带这个 Token,服务器通过验证 Token 来确认用户的身份和权限。

应用场景:移动应用、Web 应用(特别是 SPA)

优点:

无状态性,即服务器不需要存储用户的会话信息。

易于实现跨域认证。

缺点:

Token 可能被窃取,应使用 HTTPS、不暴露在 URL 中、使用 HttpOnly 的 Cookie、对 Session ID 进行验证、设置合理过期时间、对 Token 进行加密等措施加强防范。


二、HMAC 接口认证方式

原理:

客户端将消息M与密钥K连接起来,通过哈希函数计算得到 HMAC 值,发送给服务器。服务器收到请求后,使用相同的密钥和请求参数重新计算 HMAC 值,如果与客户端发送的签名一致,即是合法请求。

优点:

安全性较高,攻击者很难伪造 HMAC 值,截获并篡改数据也无法通过服务端验证。

计算效率较高,哈希函数(如 MD5、SHA-1、SHA-256 等)计算效率比较高。

缺点:

密钥的更新和管理比较麻烦。


扩展:

在消息体中添加时间戳以防止重放攻击。

加密隐私数据:可以使用对称加密算法(如 AES)或非对称加密算法(如 RSA、ECC 等)对部分隐私数据进行加密。非对称算法虽然更安全,但速度较慢,如需加密大量数据,可以考虑使用对称加密算法进行加密,然后使用非对称加密算法对对称密钥进行加密。

xoyozo 1 年前
2,492