邮件的安全认证(dkim/spf/dmarc)
dkim
dkim是用来识别电子邮件合法以及完整性的一种技术手段,主要方式是通过非对称加密对邮件本身进行签名,邮件接收方可以使用发送方提供的公钥对签名进行校验,来确认邮件是否伪造或者被篡改。
如何查看dkim
dkim签名被放在邮件原始内容的header DKIM-Signature中。用来验证签名的公钥放在指定域名的txt记录中,域名格式为:[selector]._domainkey.[domain],其中selector和domain两个字段我们可以从签名里面获得。
如下是DKIM-Signature的样本:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=okta.com; h=content-type:from:mime-version:subject:reply-to:list-unsubscribe: list-unsubscribe-post:to:cc:content-type:from:subject:to; s=cs1; bh=ypeqONcClQagR0kT04HrbN3qC+qUicpfaZbwpvfEk4g=; b=CtgFBpVnIQICeGi5jNo4ih4jmvIkqeME229RRxP7ZuUx3W/oo9efsVXq5fxInlxHD8+C o2xAvL7WzEA6uqQdT3qZ5hGYDx8FDg8aBJBsa4R3NilKqt/ke9rxwzIXSIiUchV4In2+ev N7YhwbM0wSVEkBY3pPLOmnPkk9cPMY/2zT7ySxoNrOLvF3l7mnBrXp/O9xi3P3U/FVuF4N F8cUzSkD3nj4ic9VftCiZGwB9tdv+1cIPTFothrwbsk/6zfd2Ecc88jMAcC4V36XPqTmVQ WixvOZf3R0zK/v69gdd0jBHpZjlY18rWFysE6wltYV9ALFay0YLpBRBNEYcxbbZw==
d: 获取公钥的根域名
s: 获取公钥域名的selector
以上面的签名内容为例,那么我们可以从域名cs1._domainkey.okta.com中获取公钥。
h:列出了用于创建数字签名的字段
bh:邮件正文的hash值
b:邮件签名内容,使用b和bh生成,并使用私钥签名。
SPF
SPF是用来验证发送邮件的服务器合法性的一套机制。通过声明指定域名的邮件服务器ip地址列表,收件人可以根据发送着封邮件的服务器ip地址来判断这封邮件是否来自合法的发送方。
spf如何工作
当服务器a发送电子邮件到服务器b时,服务器b会读取电子邮件的返回路径email@xxreturn.com (返回地址不同于“发件人”地址,专用于收集和处理退回的消息)。之后搜寻该邮箱域名的spf记录,之后验证服务器a的ip地址是否在spf记录中,如果不在则说明该邮件并不来自于合法的发件服务器。
如何查询spf记录
spf记录存放于邮箱域名的txt记录中,以v=spf1开头。spf记录支持引用关系,很多时候一条spf记录会引用其他记录,只要是在被引用的列表中的ip都认为是合法ip地址。
以gmail.com为例,首次查询txt记录时会看到如下结果:
"v=spf1 redirect=_spf.google.com"
我们再次查询 _spf.google.com的spf记录
v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all
继续查询_netblocks.google.com的spf记录
"v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
这里所列出来的ip地址均为gmail.com邮件服务器合法ip。当然不止这些,我们需要把所有被引用的记录都遍历一遍才能拿到所有的ip列表。
DMARC
DMARC政策用来告诉邮件服务器如何处理那些spf或者dkim校验失败的邮件。是忽略这些失败的校验,还是放到垃圾邮箱或者不做转发。
如何查询DMARC记录
dmarc记录可以在邮箱域名的_dmarc子域名的txt记录中找到,比如邮箱@gmail.com, 对应的dmarc记录在_dmarc.gmail.com的txt记录中,以v=DMARC1开头。如下是gmail邮箱的dmarc记录
"v=DMARC1; p=none; sp=quarantine; rua=mailto:mailauth-reports@google.com"
DMARC的定义
p=quarantine
表示电子邮件服务器应当“隔离”未通过 DKIM 和 SPF 的电子邮件,将它们视为潜在的垃圾邮件。其他可能的设置包括p=none
,它允许未通过检查的电子邮件仍然传递,以及p=reject
,它指示电子邮件服务器阻止未通过检查的电子邮件。adkim=s
意味着 DKIM 检查是“严格的”。将s
改为r
,即可将其设置为“宽松的”,比如adkim=r
aspf=s
与adkim=s
的意义相同,但是针对 SPF- sp 用于设定该域名下其他子域名邮箱的策略
- rua=mailto:mailauth-reports@google.com 当出现邮件的安全校验未通过时,发送报告到邮箱mailauth-reports@google.com
相关文章:
邮件的安全认证(dkim/spf/dmarc)
dkim dkim是用来识别电子邮件合法以及完整性的一种技术手段,主要方式是通过非对称加密对邮件本身进行签名,邮件接收方可以使用发送方提供的公钥对签名进行校验,来确认邮件是否伪造或者被篡改。 如何查看dkim dkim签名被放在邮件原始内容的…...

单调栈问题
原理 单调栈的核心原理是:在栈内保持元素的单调性(递增或递减) 单调递增栈: 用于处理“下一个更小的元素”问题。当新元素比栈顶元素小或等于时,直接入栈;否则,一直从栈顶弹出元素,…...

Hexo博客重新部署与Git配置
由于电脑重装了一次,发现之前Hexo与NexT主题版本过于落后,重新部署了下。 1 Node.js与git安装 这一块安装就不赘述了。去两个官网找安装文件安装即可。 node.js git 打开git以后配置的几个关键命令行。 git config --global user.name "你的gi…...
KUKA机器人专业名词解释
1、CCU Cabinet Control Unit (控制柜控制单元) 2、CIB Cabinet Interface Board (控制柜接口板) 3、HMI Human Machine Interface (人机界面);KUKA.HMI 是 KUKA 操作界面。 4、KCB …...

阿里云 物联网平台 MQTT连接、数据传输
阿里云 物联网平台 MQTT连接、数据传输 1、设备连接阿里云 2、多设备之前的通信、数据流转 3、设备数据来源的读取。 基于C# winform 开发上位机,读取设备、仪器、MES或者电子元器件的数据,MQTT传输至阿里云平台,可视化界面构建界面&#…...

栈和队列OJ练习题及解答
前言 上一篇博客已经讲到了栈和队列的数据结构,概括一下:栈后进先出(Last In First Out)、队列先进先出(First In First Out)。那么,接下来就来讲讲,关于栈和队列的相关练习题&#…...

渗透测试-信息收集
网络安全信息收集是网络安全领域中至关重要的一环,它涉及到对目标系统、网络或应用进行全面而细致的信息搜集和分析。这一过程不仅有助于理解目标网络的结构、配置和潜在的安全风险,还能为后续的渗透测试、风险评估和安全加固提供有力的支持。 在网络安…...
电力乙级资质延伸换证:企业转型的契机
电力乙级资质延伸换证不仅是企业合规运营的必要步骤,同时也为企业转型提供了重要的契机。在这个过程中,企业可以重新审视自身的业务模式、管理体系、技术能力等方面,寻找新的增长点和发展方向。 首先,电力乙级资质延伸换证要求企业…...
基于Redis实现分布式锁——Java版本
基于Redis实现分布式锁——Java版本 版本一版本二版本三Redisson 定义分布式锁接口如下: public interface ILock {boolean tryLock(long timeoutSec);void unlock(); }版本一 设定业务超时时间,到期自动解锁。缺点是超时时间不好估计,需要…...

Qt自定义控件--提升为
为什么要自定义控件 1,有复合小控件需要组合为一个整体控件时; 2,一个复合控件需要重复使用时; 实现 自定义控件文件 新增三个文件 关联不同组的控件 关联之前的准备工作 1,在主控件选择和子控件所有控件所在控件…...
Lua 基础 01 入门
Lua 基础相关知识 第一期 注释 -- 单行注释--[[多行注释 --]]-- 多加一个横杠符号就能重新启用注释内的代码 ---[[print("Lua") --]]数据类型 Lua 是动态类型语言,变量不需要类型定义,只需要为变量赋值。 Lua 有 8 种基本类型:…...

远程连接阿里云ECS
说明:ECS(阿里云服务器)可选择的系统镜像如下: 本文介绍基于Windows系统,对CentOS、Ubuntu、Windows这三个操作系统的连接方式,以及连接工具Windterm的使用。 CentOS & Windterm CentOS是我使用时间最…...

【C++】多态(上)超详细
封装,继承,多态不只是C的三大特性,而是面向对象编程的三大特性。 什么是多态: 不同的对象做同一件事情,结果会出现多种形态。 1.满足多态的几个条件 1.父子类完成虚函数重写(需要满足三同:函…...
【Git】 Git分支操作指南
隐形的纪念躲在心里面 也许吧 也许不会再见 阴天或晴天 一天又一年 风它在对我说莫忘这一切 🎵 蔡淳佳《隐形纪念》 Git是一种非常强大的分布式版本控制系统,允许用户在开发过程中创建不同的分支(branch)来分…...

智慧文旅赋能旅游服务升级:以科技创新驱动行业变革,打造智慧化、个性化、高效化的旅游新体验,满足游客日益增长的多元化需求
目录 一、引言 二、智慧文旅的概念与内涵 三、智慧文旅在旅游服务升级中的应用 1、智慧旅游服务平台建设 2、智慧景区管理 3、智慧旅游营销 四、智慧文旅推动旅游行业变革的案例分析 案例一:某智慧旅游城市建设项目 案例二:某景区智慧化改造项目…...
AtCoder Beginner Contest 310 E题 NAND repeatedly
E题:NAND repeatedly 标签:动态规划题意:给定一个长度为 n n n的 01 01 01字符串 A i A_i Ai,给定规则: 0 ⊼ 0 1 , 0 ⊼ 1 1 , 1 ⊼ 0 1 , 1 ⊼ 1 0 0⊼01,0⊼11,1⊼01,1⊼10 0⊼01,0⊼11,1⊼01,1⊼10。 求 ∑…...

一款简易的免费抽奖软件
一、介绍 这款抽奖软件设计简洁,操作便捷。用户可以轻松将参与名单通过EXCEL文件导入至程序中,并可根据需要设定各类奖品和对应的中奖人数。在选定了奖品后,用户只需点击“开始”按钮,随后再按下“暂停”按钮,软件便会…...
Kubernetes 监控管理
目录 1. Metrics Server2. Prometheus & Grafana3. cAdvisor4. 日志收集5. 告警与通知6. 最佳实践 Kubernetes 监控管理是确保集群稳定运行和应用服务质量的关键环节。它涉及收集、聚合、分析集群及其上运行的应用程序的各种指标和日志数据。 1. Metrics Server 作用&…...
哈希表第6/9题--四数相加II
题目描述: 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入&…...
使用JavaScript将富文本HTML转换为纯文本
在Web开发中,我们经常需要处理HTML内容,但有时为了特定的目的,比如文本处理、搜索或显示在非HTML环境中,我们可能希望将富文本HTML转换为纯文本。这里,我们将探讨如何使用JavaScript来实现这一功能。 为什么要将HTML转…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...