Web安全之HTTPS调用详解和证书说明案例示范
随着互联网的高速发展,网络安全成为了一个不可忽视的话题,特别是在涉及用户敏感信息的业务系统中。在此背景下,使用HTTPS取代HTTP成为了大势所趋。本文将以电商交易系统为例,详细介绍HTTPS的重要性,并探讨如何通过HTTPS来提升网站的安全性。
第一章 HTTPS的必要性
问题:HTTP的不足与风险
在传统的HTTP协议中,数据以明文形式在客户端与服务器之间传输。这意味着任何具有中间人攻击能力的人(如网络运营商、黑客)都可以截获和修改这些数据。例如,当用户在电商网站上输入信用卡信息时,如果使用HTTP传输,这些敏感信息就有可能被拦截,进而导致严重的安全问题。
示例:
假设用户在电商网站进行结算,页面使用HTTP协议。黑客通过网络嗅探工具拦截用户的请求包,轻而易举地获取用户的信用卡号和支付信息。之后,黑客可能会使用这些信息进行非法交易,给用户和商家带来不可估量的损失。
解决方案:使用HTTPS保障安全
HTTPS(Hypertext Transfer Protocol Secure)是在HTTP的基础上增加了SSL/TLS协议,用于加密数据传输,保障数据在传输过程中的机密性、完整性和身份验证。通过HTTPS协议,黑客即使截获数据包,也无法解读其中的内容,极大地提升了通信的安全性。
第二章 为什么要用HTTPS而不是HTTP
1. 数据加密
HTTPS通过SSL/TLS加密机制保障了数据在客户端和服务器之间传输时的安全性。加密算法会对传输的数据进行加密,使得第三方无法轻易读取或篡改数据。
2. 身份验证
通过HTTPS协议,服务器需要出示证书来证明其身份,避免用户误连接到虚假或恶意服务器。
3. 数据完整性保障
HTTPS确保了数据在传输过程中不会被篡改,即使数据包在传输中被拦截,拦截者也无法修改包内内容而不被发现。
第三章 HTTPS证书的选择
HTTPS依赖于SSL/TLS证书来保障通信安全。不同的证书类型适用于不同的场景,选择合适的证书是确保系统安全的关键。
免费证书 vs. 商业证书
免费证书:
免费证书(如Let’s Encrypt)广泛用于个人站点和中小型企业。这些证书可以自动更新,适合预算有限的项目。然而,免费证书通常提供的服务支持较为有限,且一些高级功能可能无法使用。
商业证书:
商业证书由专门的证书颁发机构(CA)提供,适用于对安全性要求较高的大型企业。商业证书提供更高的信任级别以及更长的有效期,部分还提供保险服务,增加了风险保障。
示例:
在电商平台中,由于涉及到大量用户的支付信息,使用商业证书会更加稳妥。这类证书通常由知名CA颁发,增强了用户对平台的信任感。
第四章 证书颁发机构(CA)的重要性
证书颁发机构(CA)负责验证服务器身份,并颁发数字证书。CA是HTTPS认证体系中的核心角色,用户通过验证服务器的数字证书,确认其真实身份。选择可信的CA至关重要,因为如果用户不信任证书提供商,他们也很难信任你的平台。
常见的CA包括:
- Let’s Encrypt(免费)
- DigiCert
- GlobalSign
- Comodo
在选择CA时,需考虑其全球信任度、证书支持范围及附加服务。
第五章 在Spring Boot 中配置 HTTPS 及调用 HTTPS 接口请求的示例与配置
在现代化电商交易系统中,安全性至关重要。除了保障我们自己的应用通过 HTTPS 安全传输外,调用外部服务(如支付接口、物流接口)时,也需要确保 HTTPS 请求的安全性。本文将详细介绍如何在 Spring Boot 中配置 HTTPS 以及通过 RestTemplate
和 HttpClient
调用 HTTPS 接口的示例,并对相关配置参数进行说明。
1. 配置 HTTPS 的步骤
首先我们来详细讲解如何在 Spring Boot 中配置 HTTPS,确保应用程序能够通过 HTTPS 进行安全通信。
使用自签名证书配置 HTTPS
自签名证书通常用于开发和测试环境。生产环境中通常不建议使用,因为它不能为用户提供有效的身份验证。
-
生成自签名证书
使用
keytool
生成自签名证书:keytool -genkeypair -alias mycert -keyalg RSA -keysize 2048 -validity 365 -keystore keystore.jks
在该命令中:
-alias mycert
是证书的别名。-keyalg RSA
是使用的加密算法。-validity 365
表示证书的有效期为365天。-keystore keystore.jks
是生成的证书文件。
-
将证书配置到 Spring Boot
在 Spring Boot 应用的
application.properties
文件中进行配置:server.port=8443 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=your_password server.ssl.key-password=your_password server.ssl.key-store-type=JKS
主要配置参数说明:
server.port=8443
:指定应用监听的 HTTPS 端口。server.ssl.key-store
:指定证书库的路径。server.ssl.key-store-password
:证书库的密码。server.ssl.key-password
:密钥密码,用于解锁密钥。server.ssl.key-store-type=JKS
:证书库的格式,这里使用 Java 密钥库(JKS)。
-
启动并测试 HTTPS 连接
启动 Spring Boot 应用后,通过
https://localhost:8443
访问,验证 HTTPS 是否成功启用。
使用 Let’s Encrypt 免费证书配置 HTTPS
Let’s Encrypt 提供免费的 SSL/TLS 证书,适用于生产环境。以下是配置 Let’s Encrypt 证书的步骤:
-
生成 Let’s Encrypt 证书
使用
certbot
生成 Let’s Encrypt 证书:sudo apt install certbot sudo certbot certonly --standalone -d yourdomain.com
证书生成后存储在
/etc/letsencrypt/live/yourdomain.com/
目录下。 -
配置 Let’s Encrypt 证书到 Spring Boot
在
application.properties
文件中添加以下配置:server.port=443 server.ssl.key-store=/etc/letsencrypt/live/yourdomain.com/fullchain.pem server.ssl.key-store-password=your_password server.ssl.key-password=your_password server.ssl.key-store-type=PKCS12
参数说明:
server.ssl.key-store
:Let’s Encrypt 证书的路径。server.ssl.key-store-type=PKCS12
:PKCS12 是一种常见的加密文件格式,适用于现代 SSL/TLS 证书。
-
自动续期
Let’s Encrypt 证书有效期为 90 天,可以通过
cron
任务设置自动续期:sudo crontab -e
添加以下行,每天自动检查并更新证书:
0 0 * * * /usr/bin/certbot renew --quiet
2. 调用 HTTPS 接口的请求配置及示例
在实际的电商系统开发中,除了配置 HTTPS 保障自身安全外,还经常需要调用外部 HTTPS 服务(如支付网关、物流接口等)。这里我们通过 RestTemplate
和 HttpClient
来演示如何配置和调用 HTTPS 接口。
使用 RestTemplate
调用 HTTPS 接口
RestTemplate
是 Spring 提供的轻量级 HTTP 客户端,用于发送 HTTP/HTTPS 请求。默认情况下,RestTemplate
支持 HTTPS 请求,但如果使用的是自签名证书,需要额外的配置。
配置 RestTemplate
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build(); // 默认支持HTTPS}
}
示例:调用第三方 HTTPS 支付接口
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class PaymentService {private final RestTemplate restTemplate;public PaymentService(RestTemplate restTemplate) {this.restTemplate = restTemplate;}public String processPayment() {String url = "https://api.payment.com/process";HttpHeaders headers = new HttpHeaders();headers.set("Authorization", "Bearer your_token");headers.set("Content-Type", "application/json");String body = "{\"amount\": 100, \"currency\": \"USD\"}";HttpEntity<String> request = new HttpEntity<>(body, headers);ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, request, String.class);return response.getBody();}
}
重要配置参数说明:
restTemplate.exchange()
:用于发送 HTTP 请求,可以自定义请求方法(如 GET、POST 等)。HttpHeaders
:用于设置请求头,包含认证信息、内容类型等。HttpEntity
:用于封装请求体和头信息。
处理自签名证书
如果调用的外部服务使用自签名证书,则需要配置 TrustStrategy
来信任所有证书:
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
import java.security.NoSuchAlgorithmException;
import java.security.KeyManagementException;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial((chain, authType) -> true) // Trust all certificates.build();CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).build();HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);return new RestTemplate(factory);}
}
该配置将允许 RestTemplate
信任自签名证书的 HTTPS 请求。
使用 HttpClient
调用 HTTPS 接口
HttpClient
是一个功能强大的 HTTP 客户端,适用于需要复杂配置的 HTTP/HTTPS 请求。
示例:使用 HttpClient
调用 HTTPS 接口
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class HttpsRequestExample {public static String sendPostRequest(String url, String jsonPayload) throws Exception {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpPost httpPost = new HttpPost(url);httpPost.setHeader("Content-Type", "application/json");httpPost.setEntity(new StringEntity(jsonPayload));HttpResponse response = httpClient.execute(httpPost);return EntityUtils.toString(response.getEntity());}}public static void main(String[] args) throws Exception {String url = "https://api.payment.com/process";String jsonPayload = "{\"amount\": 100, \"currency\": \"USD\"}";String response = sendPostRequest(url, jsonPayload);System.out.println("Response: " + response);}
}
重要配置参数说明:
HttpPost
:指定 HTTP 请求方法为 POST。setHeader()
:用于设置请求头,比如内容类型、认证信息等。StringEntity
:将 JSON 格式的请求体封装成 HTTP 实体对象。HttpResponse
:用于接收服务器的响应。
处理自签名证书
同样,如果外部 HTTPS 服务使用自签名证书,需要信任所有证书:
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;public class HttpClientConfig {public CloseableHttpClient createHttpClientWithTrustAllCerts() throws NoSuchAlgorithmException, KeyManagementException {SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial((chain, authType) -> true) // Trust all certificates.build();return HttpClients.custom().setSSLContext(sslContext).build();}
}
第六章 在生产环境中确保HTTPS的注意事项
在生产环境中,仅仅配置HTTPS是不够的,还需要确保安全配置的正确性。以下是一些最佳实践:
TLS的配置与最佳实践
-
支持的TLS版本配置: 生产环境中,建议只启用TLS 1.2及更高版本。TLS 1.0和1.1已被认为不安全,应禁用。
server.ssl.enabled-protocols=TLSv1.2,TLSv1.3
-
禁用不安全的加密算法: 一些过时的加密算法已经被证明存在漏洞。应确保配置中禁用了这些不安全的算法。
server.ssl.ciphers=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
-
强制HSTS(HTTP Strict Transport Security): HSTS是一种安全机制,告知浏览器在未来的请求中仅通过HTTPS访问站点,从而防止降级攻击。
在Spring Boot中可以通过添加SecurityHeaders配置实现:
@Override protected void configure(HttpSecurity http) throws Exception {http.headers().httpStrictTransportSecurity().maxAgeInSeconds(31536000) // 一年.includeSubDomains(true); // 应用到子域名 }
第七章 HTTPS对性能的影响,HTTPS性能优化
虽然HTTPS提供了更高的安全性,但也会引入一些额外的计算开销,如加解密的处理。幸运的是,现代的硬件和软件优化已经能够显著减少HTTPS的性能影响。
优化措施
- 启用HTTP/2: HTTP/2可以显著提升HTTPS的性能,特别是减少请求响应的延迟时间。
- 使用更快的加密算法: 选择适合的加密算法,如AES 128比AES 256更高效,同时也能提供足够的安全性。
- 使用会话缓存: 通过启用SSL会话缓存,减少重新建立SSL连接的时间。
第八章 如何识别证书是否过期(Linux下)
在生产环境中,定期检查证书是否过期是至关重要的,尤其是当证书过期时,用户可能会无法访问系统。
检查证书有效期:
使用OpenSSL工具可以快速检查证书的有效期:
openssl x509 -enddate -noout -in /path/to/your/certificate.pem
输出示例:
notAfter=Sep 1 12:00:00 2023 GMT
自动检测并发出警报:
可以使用定时任务(cron)结合脚本,在证书快到期时发出警报。
#!/bin/bash
EXPIRATION_DATE=$(openssl x509 -enddate -noout -in /path/to/your/certificate.pem | cut -d= -f2)
EXPIRATION_TIMESTAMP=$(date -d "$EXPIRATION_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)if (( $EXPIRATION_TIMESTAMP - $CURRENT_TIMESTAMP < 2592000 )); thenecho "Warning: Certificate is about to expire!" | mail -s "SSL Certificate Expiry Warning" admin@yourdomain.com
fi
相关文章:
Web安全之HTTPS调用详解和证书说明案例示范
随着互联网的高速发展,网络安全成为了一个不可忽视的话题,特别是在涉及用户敏感信息的业务系统中。在此背景下,使用HTTPS取代HTTP成为了大势所趋。本文将以电商交易系统为例,详细介绍HTTPS的重要性,并探讨如何通过HTTP…...
man命令学习记录
使用man来查看命令的用法 man ls 想了解Linux命令的用法假设你想查ls命令的更多信息,输入man ls,就会打开man page(man是manual的缩写,因此man page就是“手册页面”),显示关于ls命令各个方面的信息。 通常…...
Linux三剑客-grep
grep介绍 全拼: Global search REgular expression and Print out line. 作用: 文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行。 模式: 有正则表达…...

备忘录模式memento
学习笔记,原文链接 https://refactoringguru.cn/design-patterns/memento 允许生成对象状态的快照并在以后将其还原。备忘录不会影响它所处理的对象的内部结构, 也不会影响快照中保存的数据。...
5-【JavaWeb】JUnit 单元测试及JUL 日志系统
1. 使用 JUnit 进行单元测试 JUnit 是 Java 中非常流行的单元测试框架,MyBatis 与 JUnit 可以很好地结合,来测试持久层代码的正确性。 1.1 添加 JUnit 依赖 在使用 JUnit 之前,需要在 pom.xml 中引入 JUnit 依赖。 <dependency><…...

多人开发小程序设置体验版的痛点
抛出痛点 在分配任务时,我们将需求分为三个分支任务,分别由前端A、B、C负责: 前端A: HCC-111-实现登录功能前端B: HCC-112-实现用户注册前端C: HCC-113-实现用户删除 相应地,我们创建三个功能分支: feature_HCC-111-实现登录功能feature_HCC-112-实现用户注册feature_HCC-1…...

【Kubernetes】常见面试题汇总(七)
目录 20.简述 Kubernetes 创建一个 Pod 的主要流程? 21.简述 Kubernetes 中 Pod 的重启策略? 20.简述 Kubernetes 创建一个 Pod 的主要流程? Kubernetes 中创建一个 Pod 涉及多个组件之间联动,主要流程如下: &#…...
EmguCV学习笔记 C# 11.1 DnnInvoke类
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

论文解读 | ACL2024 Outstanding Paper:因果指导的主动学习方法:助力大语言模型自动识别并去除偏见...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击阅读原文观看作者直播讲解回放! 作者简介 孙洲浩,哈尔滨工业大学SCIR实验室博士生 概述 尽管大语言模型(LLMs)展现出了非常强大的能力,但它们仍然…...

xLSTM模型学习笔记
笔记来源:bilibili LSTM 回顾 原始的 LSTM 是为了解决 RNN 时序反向传播中梯度消失和爆炸问题而提出的。 其所谓的门控机制,其实就是一种时序上的注意力机制,相当于把不同时间进行"掺和",是对时序信息的一种选择性控制…...
woocommerce 调用当前product_tag 为标题
要在 WooCommerce 中调用当前产品标签(product tag)作为标题,你可以使用以下代码。这段代码将获取当前产品标签的名称,并将其显示为标题。 <?php // 获取当前产品标签名称 $current_tag single_term_title(, false);// 检查是…...

音视频开发:基于sdl的pcm播放器
源码 /*** SDL2播放PCM*** 本程序使用SDL2播放PCM音频采样数据。SDL实际上是对底层绘图* API(Direct3D,OpenGL)的封装,使用起来明显简单于直接调用底层* API。* 测试的PCM数据采用采样率44.1k, 采用精度S16SYS, 通道数2** 函数调…...

[产品管理-6]:NPDP新产品开发 - 4 - 战略 - 创新支持战略,支持组织的总体创新战略(平台战略、技术战略、营销战略、知识产权战略、能力建设战略)
目录 一、创新支持战略概述 二、平台战略:大平台小产品战略 2.1 概述 1、平台战略的定义 2、平台战略的特点 3、平台战略的应用领域 4、平台战略的成功案例 5、平台战略的发展趋势 2.2 大平台小产品战略 1)大平台的建设 2)、小产品…...

Cursor:程序员的AI助手,开启智能编程新时代
在当今快节奏的软件开发世界,效率和准确性是成功的关键。而 Cursor,作为一款创新的人工智能编程工具,正在极大地改变着编程的面貌,为开发者带来前所未有的便捷与惊喜。 智能代码生成 Cursor 利用强大的人工智能模型,…...
OpenAI 刚刚发布了新的Sora视频——实现的真人效果令人惊叹
在 YouTube 上发布了两段由专业创作者制作的新的“Sora Showcase”视频。这些视频展示了尚未发布的 Sora AI 视频模型的惊人潜力。 Sora 于今年二月首次宣布,但由于生成时间、成本和错误信息的潜在风险,光年AI 仅向一小部分创作者 开放了该模型。 自So…...
计算机视觉学习路线
计算机视觉是一门让机器理解和解释视觉世界的科学,它涉及到图像识别、图像处理、模式识别等多个方向。学习计算机视觉的路线通常包括以下几个阶段: 数学和编程基础:需要掌握微积分、线性代数、概率论等数学知识,以及Python或C等编…...

JNPF快速开发平台在企业中的应用
随着数字化转型的浪潮席卷全球,企业纷纷寻求高效、灵活的解决方案以适应快速变化的市场需求。在这一背景下,低代码开发平台应运而生,成为数字经济的“软基建”。今天,我们就来探讨JNPF快速开发平台如何在企业中发挥作用࿰…...

Mysql高级篇(中)—— 索引优化
Mysql高级篇(中)—— 索引优化 一、索引分析案例案例 1:单表查询案例 2:两表连接查询案例 3:三表连接查询 二、避免索引失效常见索引失效场景简述场景 1场景 2场景 3场景 4场景 5场景 6 三、索引优化文字版示例版 一、…...
electron: 将网址打包成exe桌面应用
项目场景: 在项目开发的过程中,需要将应用搭建在不同的硬件上。如需要在一个触屏显示器上展示企业相关的应用。 如果专门去开发一个这样的应用,不划算;这时候考虑将网址打包成exe应用,并安装触屏器上,就可…...

【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
文章目录 PyQt5超详细教程前言第7部分:生成图表与数据可视化7.1 matplotlib 与 PyQt5 的结合7.2 在 PyQt5 中嵌入 matplotlib 图表示例 1:嵌入简单的 matplotlib 图表代码详解: 7.3 动态生成图表示例 2:动态更新图表代码详解&…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...