HTTP协议冷知识大全

【笔记软件obsidian】从入门到精通 目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、 阅读详情

640?wx_fmt=jpeg

如果不用HTTPS,HTTP协议如何安全的传输密码信息?

HTTP协议是纯文本协议,没有任何加密措施。通过HTTP协议传输的数据都可以在网络上被完全监听。如果用户登陆时将用户名和密码直接明文通过HTTP协议传输过去了,那么密码可能会被黑客窃取。

640?wx_fmt=png

文件路径攻击

很多操作系统都会使用..符号表示上层目录。如果黑客在URL的路径里面使用..符号引用上层目录,而服务器没有做好防范的话就有可能导致黑客可以直接访问权限之外的文件。比如使用多级..符号就可以引用到根目录,进一步就可以访问任意文件。

DNS欺骗

HTTP协议严重依赖于DNS域名解析。任意一个域名类网址的访问都需要经过域名解析的过程得到目标服务的IP地址才能成功继续下去。

640?wx_fmt=png

谨慎使用外部的HTTP代理

HTTP代理作为客户端到服务器之间的中间路由节点,它起到传话人和翻译官的角色。

640?wx_fmt=png

413 Request Entity Too Large

客户端上传图片太大超过服务器限制时,服务器返回413错误。

414 Request-URI Too Long

客户端访问的URI太长,超出了服务器允许限制,服务器返回414错误。

202 Accepted

常用于异步请求。客户端发送请求到服务器,服务器立即返回一个202 Accepted表示已经成功接收到客户端的请求。

POST提交数据的方式

application/x-www-form-urlencoded

提交数据表单时经常使用,Body内部存放的是转码后的键值对。

POST http://xyz.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
a=1&b=2&c=3&c=4

application/json

提交结构化表单时使用,Body内部存放的是JSON字符串。ElasticSearch的查询协议使用的是这种方式。

POST http://xyz.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"a": 1, "b": 2, "c": [3, 4]}

multipart/form-data

上传文件时经常使用。这种格式比较复杂,它是为了支持多文件上传混合表单数据而设计的一种特殊的格式。

<form action="http://example.com/upload" method="post" enctype="multipart/form-data">
  <p><input type="text" name="key1" value="value1">
  <p><input type="text" name="key2" value="value2">
  <p><input type="file" name="file1">
  <p><input type="file" name="file2">
  <p><button type="submit">Submit</button>
</form>

用户填充了表单设置了待上传的文件,点击Submit,传输数据大致如下

POST /upload HTTP/1.1
Content-Length:xxxxx
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryKOThiwE6HubGib7j
Host:example.com
------WebKitFormBoundaryKOThiwE6HubGib7j
Content-Disposition: form-data; name="key1"
value1
------WebKitFormBoundaryKOThiwE6HubGib7j
Content-Disposition: form-data; name="key2"
value2
------WebKitFormBoundaryKOThiwE6HubGib7j
Content-Disposition: form-data; name="file1"; filename="file1name.png"
Content-Type: image/png
file1 content here
------WebKitFormBoundaryKOThiwE6HubGib7j
Content-Disposition: form-data; name="file2"; filename="file2name.jpeg"
Content-Type: image/jpeg
file2 content here
------WebKitFormBoundaryKOThiwE6HubGib7j--

Cookie

浏览器请求的Cookie中往往会携带敏感信息。服务器一般会将当前用户的会话ID存在cookie里,会话的具体内容存在服务器端,会话的内容很敏感。

浏览器请求时会携带Cookie信息,服务器根据Cookie信息中的会话ID找到对应的会话内容。会话内容里可能存储了用户的权限信息,拿到这部分权限信息后就可能随意控制修改用户的数据。

640?wx_fmt=png

因为HTTP协议的不安全性,请求数据包很容易被窃听,Cookie中的会话信息很容易被盗。解决方案之一就是在会话中记录用户的终端信息和IP地址信息,如果这些信息突然发生改变,需要强制用户重新认证。

不过高级的黑客是可以伪造出和用户真实请求一摸一样的数据包的。最彻底的解决方案还是采用HTTPS协议。

普通的Cookie信息可以通过Javascript脚本获取到。如果黑客通过某种方式在网页中植入不安全的脚本,将用户的Cookie拿到然后发送到远程的第三方服务器中,那么Cookie中的信息就被泄露了。

Cookie的两个重要属性

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

被标记为Secure的Cookie信息在HTTP请求中不会被传送,它只会在HTTPS请求中传送,避免数据被泄露。

被标记为HttpOnly的Cookie信息是无法通过Javascript API获取到的,它只会在请求中传送。这样可以避免黑客通过网页脚本方式窃取Cookie中的敏感信息。

Cookie(甜点)如此好吃,黑客们总想通过Cookie做各种文章。

640?wx_fmt=png

CSRF(Cross-Site Request Forgery)

CSRF跨站请求伪造有很多别名,比如One-Click Attack(一键攻击),比如Session Riding(搭便车攻击)

假设在在一个社区博客网站中,删除个人的文章只需要一个URL就可以,Cookie中的会话权限信息会自动附加到请求上。

# 123456为文章的ID
http://example.com/blog/123456/delete

那么当别人伪造了一个上面的链接地址诱惑你去点击,比如通过站内信件、私聊、博客评论、图片链接或者在别的什么网站上随机制造的一个链接。你不经意点了一下,就丢了你的文章。所以它被称为一键攻击。因为这是借用了你当前登陆的会话信息来搞事,所以也被称为搭便车攻击。

如果在一个金融系统中,转账要是也可以通过一个简单的URL进行的话,那这种危险就非同小可。

640?wx_fmt=png

这就要求修改性的操作务必不得使用简单的GET请求进行处理。但是即使这种情况下你改成了POST请求,黑客依然有办法伪造请求,那就是通过iframe。

黑客在别的什么网站上伪造了一个POST表单,诱惑你去submit。如果只是普通的内嵌进HTML网页的表单,用户提交时会出现跨域问题。因为当前网站的域名和表单提交的目标域名不一致。但是如果通过iframe来内嵌表单,则可以绕过跨域的问题,而用户却完全没有任何觉察。

为了防范CSRF攻击,聪明的网站的POST表单里都会带上CSRF_TOKEN这个隐藏字段。CSRF_TOKEN是根据用户的会话信息生成的。当表单提交时,会将token和用户的会话信息做比对。如果匹配就是有效的提交请求。

<form method="POST" action="/blog/delete">
<label for="blog_id">博客ID</label>
<input type="text" name="blog_id" value="12345">
<input type="hidden" name="csrf_token" value="xxxxxxxxxxxx">
</form>

黑客必须拿到CSRF_TOKEN才可以借用用户的会话信息实施CSRF攻击,但是CSRF_TOKEN又必须由用户的会话信息才可以生成。黑客没有用户的会话信息,从而无法实施CSRF攻击。

XSS(Cross Site Scripting)

如果黑客可以在你的网页中植入任意Javascript脚本,那他就可以随意鱼肉你的账户。通过Javascript可以获取Cookie的信息,可以借用你的会话去调用一些隐秘的API,而这一些行为都是在偷偷的进行,你根本完全不知道。

<div>
# 用户内容Start
<script>send_to_hacker(document.cookie)</script>
# 用户内容END
</div>

这类攻击在一些UGC网站中非常常见,常见的博客类网站就是UGC网站,用户可以通过编辑内容来生成网页。

黑客也是用户。他可以编辑一段Javascript脚本作为内容提交上去。如果服务器没有做好防范,这段脚本就会在生成的网页中运行起来。当其它用户在登陆的状态下来浏览这个网页的时候,就悲剧了。

640?wx_fmt=png

防范XSS一般是通过对输出的内容进行内容替换做到的。在HTML页面中不同的位置会有不同的内容替换规则。

<div>
# safe now
&lt;script&gt;send_to_hacker(document.cookie)&lt;/script&gt;
</div>

还有些UGC内容在HTML标签的属性中、Javascript的变量中、URL、css代码中,他们转码的规则并不一样,具体方法可以去Google相关文档。

640?wx_fmt=jpeg

跨域

跨域是个很头痛的问题。

当你有多个后端服务,但是只有一个前端的时候,你想做前后端分离,就会遇到跨域问题。你发现你的前端js调用后端服务时控制台告诉你不ok。然后只好把这些服务都挂在了同一个nginx域名下面,通过url前缀区分。

640?wx_fmt=png

这时候你会想,跨域太TM讨厌了。既然跨域这么讨厌,那为什么浏览器非要限制跨域呢?

还是安全原因。

让我们回到上文的搭便车攻击(Session Riding),也就是骑着别人的会话来搞事情。

假设现在你的浏览器开了一个站点A,登陆了进去,于是cookie便记录了会话id。

但是有时候我们又希望共享数据给不同的站点,该怎么办呢?

答案是JSONP & CORS

JSONP(JSON Padding)

JSONP通过HTML的script标记实现了跨域共享数据的方式。JSON通过在网页里定义一个回调方法,然后在页面上插入一个动态script标签,指向目标调用地址。服务器会返回一段javascript代码,一般是some_callback(data)这种形式的回调。该段代码会在浏览器里自动执行,于是网页就得到了跨域服务器返回的数据。

<script>
function some_callback(data) {
    console.log(data)
}
</script>
<script src="http://example.com/someapi?callback=some_callback"></script>

因为JSONP是不携带cookie信息的,所以能有效避免搭便车攻击。JSONP是否可以获取到数据还需要服务器对这种调用提供显示支持,服务器必须将数据以javascript代码的形式返回才可以传递给浏览器。

CORS(Cross-Origin Resource Sharing)

JSONP的不足在于它只能发送GET请求,并且不能携带cookie。而CORS则可以发送任意类型的请求,可以选择性携带cookie。

CORS是通过Ajax发送的跨域请求技术。CORS的请求分为两种,一种是简单请求,一种是复杂请求。简单请求就是头部很少很简单的GET/HEAD/POST请求。复杂请求就是非简单请求。

浏览器发现Ajax的请求是跨域的,就会在请求头添加一个Origin参数,指明当前请求的发起站点来源。服务器根据Origin参数来决定是否授权。

如果是简单请求,Ajax直接请求服务器。服务器会当成普通的请求直接返回内容,不同的是还会在响应头部添加几个重要的头部,其中最重要的头部是Access-Control-Allow-Origin: http://example.com。

浏览器如果在响应中没有读到这个头部,就会通知Ajax请求失败。虽然服务器返回了数据,浏览器也不让脚本读到数据,这就保证了跨域的安全。服务器就是通过请求的Origin参数来决定要不要响应Access-Control-Allow-Origin头部来决定是否允许指定网站的跨域请求。

如果是复杂请求,要走一个预检的流程。预检就是浏览器先向服务器发送一个Method为Options的请求,如果服务器允许跨域请求,浏览器再发起这个Ajax请求。所以CORS的复杂请求会比简单请求额外耗费一个TTL的时间。

CORS的细节请参见大神阮一峰的博文《跨域资源共享CORS详解》

640?wx_fmt=jpeg

阅读相关文章,关注公众号【码洞】

SMR实战指南:从GWAS数据到eQTL分析的完整流程 本文提供了基于汇总数据的孟德尔随机化(SMR)实战指南,详细解析了如何从GWAS汇总数据出发,整合eQTL数据,完成从数据准备、BESD格式转换到最终SMR与HEIDI分析的完整流程。文章重点阐述了核心操作步骤、常见避坑技巧与结果解读,旨在帮助遗传学研究者高效掌握这一分析基因表达与复杂性状潜在因果关系的强大工具。 阅读详情

相关推荐

HTTP协议及其安全隐患

HTTP协议   在TCP/IP协议栈中,应用层包含很多的协议,其中应用最为广泛的协议被称之为HTTP协议。在日常生活中使用HTTP协议十分广泛,比如在访问网站的时候,使用的协议就是HTTP协议。 HTTP协议   HTTP是一个基于请求与响应模式的、无状态的应用层协议。 请求响应   客户端要向web服务器发送一个请求以后,等待服务器回送http响应消息。 无状态   http协议整个过程当...

浮云渐渐 4992

SpringBoot项目启动后ShardingSphere5.0首次SQL查询慢?这个预热技巧帮你搞定

本文针对SpringBoot项目集成ShardingSphere 5.0后首次SQL查询慢的问题,深入剖析了其根源在于SQL解析引擎的懒加载与缓存初始化。文章提供了三种有效的预热技巧,包括精准的SQL解析引擎预热、简单查询触发全链路预热以及可配置的生产级方案,帮助开发者将初始化成本提前至应用启动阶段,从而消除性能毛刺,提升用户体验与系统稳定性。

chair的专栏 1063

AI视觉批量测量人体上肢关节角度:医疗康复企业落地实践

人体关节活动度(ROM)是康复评估的核心量化指标,传统量角器人工测量存在效率低、误差大等瓶颈。基于深度学习的人体关键点检测技术,通过识别肩、肘、腕等关节坐标,结合向量几何原理即可自动计算关节角度,在医疗康复场景中展现出明显的规模化优势。这类视觉测量方案不仅支持视频批量处理,还能输出曲线和可追溯报告,其精度甚至优于不同康复师之间的操作差异。从康复科日常评估到术后恢复跟踪,从批量后处理到实时交互反馈,相关技术正在加速渗透。本文基于医疗康复行业TOP20企业的真实项目,分享人体上肢关节角度批量测量的系统架构、算法

weixin_34321753的博客 399

别再折腾老教程了!树莓派4B/5最新系统(Raspberry Pi OS Bookworm)红外遥控配置,用gpio-ir驱动一次成功

本文详细介绍了树莓派4B/5在最新Raspberry Pi OS Bookworm系统下配置红外遥控的完整指南,摒弃过时的lirc-rpi驱动,采用现代gpio-ir驱动方案。从硬件连接到软件配置,提供10分钟快速上手指南,涵盖驱动加载、信号测试、按键映射及高级应用场景,帮助用户高效完成红外遥控配置。

weixin_42520909的博客 442

Gazebo仿真UUV水下机器人:从环境搭建到避障算法实战

本文详细介绍了使用Gazebo仿真平台进行UUV水下机器人开发的全流程,涵盖从环境搭建、uuv_simulator配置、传感器集成到核心避障算法实战。通过搭建水下仿真实验室并实现基于激光雷达数据的反应式避障算法,为水下机器人算法验证与开发提供了高效、低成本的解决方案。

weixin_28840591的博客 265

HTTP主要安全漏洞和解决思路

     本博客整理自图解HTTP和众多网络文章,对HTTP完全漏洞进行梳理,并介绍了java解决方案。       简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象,但是HTTP应用的服务端和客户端以及web应用资源是主要的攻击目标。      虽然HTTP协议本身不在安全性问题,但是因为协议本身不包含会话管理、加密处理的要求,因此使用HTTP开发的应用和服务器容...

csolo的博客 1万+

PyTorch深度学习实战(3)——使用PyTorch构建神经网络

PyTorch 是一个用于构建深度神经网络的库,具有灵活性和可扩展性,可以轻松自定义模型。在本节中,我们将使用 PyTorch 库构建神经网络,利用张量对象操作和梯度值计算更新网络权重,并利用 Sequential 类简化网络构建过程,最后还介绍了如何使用 save、load 方法保存和加载模型,以节省模型训练时间。

盼小辉丶的博客 8万+

【安全与风险】恶意软件-概念、攻击和检测

Malware一词是恶意软件的缩写。恶意软件是任何以破坏设备、窃取数据为目的编写的软件,通常会造成混乱。通常,他们只是想赚钱,要么自己传播恶意软件,要么把它卖给暗网上出价最高的人。然而,创建恶意软件也可能有其他原因——它可以被用作抗议的工具,一种测试安全性的方法,甚至是政府之间的战争武器。

qq_53058639的博客 2327

【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码

该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 615

一文搞懂数据标注

数据标注即通过分类、画框、标注、注释等,对图片、语音、文本等数据进行处理,标记对象的特征,以作为机器学习基础素材的过程。简言之,就是需要给数据做好标注,这样机器就能知道学习哪些内容。

女王の专属领地 9945

网站跨域访问

本篇文章借助DVWA-CSRF-HIGH来引出跨域访问这个问题,简单介绍以下

没有网络安全就没有国家安全 1165

雨雾天YOLOv8检测拉胯?暗通道去雾+上下文注意力双优化,mAP从58%飙到79%,暴雨也能看清车牌

室外交通监控:高速、省道的雨雾天检测,重点解决小车、货车漏检;车载ADAS系统:雨天行车时的前方车辆、行人识别,需实时性(<40ms);隧道出入口:明暗交界+雾天的复杂场景,暗通道能平衡亮度。

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

HTTP协议冷知识大全/HTTP协议冷知识大全_详细黑客自学

HTTP代理作为客户端到服务器之间的中间路由节点,它起到传话人和翻译官的角色。如果这个翻译官不靠谱的话,客户端是会拿到错误的返回数据的。它同DNS欺骗一样

程序员六七的博客 909

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HTTP协议冷知识大全/HTTP协议冷知识大全_新手网安教学

HTTP代理作为客户端到服务器之间的中间路由节点,它起到传话人和翻译官的角色。如果这个翻译官不靠谱的话,客户端是会拿到错误的返回数据的。它同DNS欺骗一样

2401_84915584的博客 836

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

宝典-HTTP协议冷知识大全-入门网安笔记

HTTP代理作为客户端到服务器之间的中间路由节点,它起到传话人和翻译官的角色。如果这个翻译官不靠谱的话,客户端是会拿到错误的返回数据的。它同DNS欺骗一样

程序员三九的博客 1001

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HTTP 协议

HTTP(超文本传输协议)是一个使用非常广泛的应用层协议:HTTP请求发送出去,就需要从应用层到物理层,层层封装;接收方收到之后,再从物理层到应用层,层层分用,最终才能完成传输;HTTP协议格式有1️⃣首行2️⃣header3️⃣空行4️⃣正文

m0_72161237的博客 5987

web前端必须掌握的HTTP协议知识

web前端必会的HTTP协议知识 HTTP协议 HTTP<超文本传输协议>的缩写。是用于从WWW服务器传输超文本到本地浏览器的传输协议.HTTP是一个应用层协议,由请求和响应构成,是一个标准的个客户端和服务器模型。 HTTP协议的特点 支持客户/服务器模式 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器...

qq_42586895的博客 5946

HTTP协议基础知识

简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从WWW服务器传输超文本到本地浏览器的传送协议。 它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等 HTTP是建立在TCP协议之上的一种应用层网络协议,由请求和响应构成,虽然HTTP通常依赖tcp作为传输层协议,但是事实上,HTTP可以在任何其他互联网协议上,或者其他网络上实现,只要其下层协议提供可靠

haolinbird的博客 4074

HTTP协议的详细知识

平时我们俗称的“网址”,其实就是URL。互联网上的每个文件都有一个唯一的URL,它包含的信息可以指出文件的位置以及浏览器应该怎么处理它。信息描述是否可以省略协议类型常见的协议由两种http和https,访问mysql的协议类型是jdbc:mysql可以省略访问资源需要的凭证信息一般就是登陆信息(用户名,密码等),但是现在的网站进行认证一般不会通过URL进行,所以一般可以省略可以省略服务器地址。

Z2076465172的博客 1615

『HTTP知识点』什么是HTTP协议?(HTTP协议详解)

1-什么是HTTP 协议 即超文本传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。 HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。 即HTTP协议主要由请求和响应构成。 http协议原理图示 2-什么是请求|请求报文 常用请求方法 POST、GET、PUT、DEL...

拎着壳儿跑的蜗牛 8522

HTTP中的冷知识

要讲HTTP,就离不开计算机网络。在计算机网络中,有分OSI体系结构以及TCP/IP体系结构,而不管是哪一种结构,HTTP都在最高层,也就是应用层。 下面就来几张图介绍一下HTTP的特点 然后就是HTTP的工作方式了 在HTTP中,它的请求报文由 请求行、请求头 & 请求体 组成 HTTP的请求方法: 在HTTP中定义了以下几种请求方法:1、GET;2、POST;3、PUT;4、D...

weixin_40586929的博客 327

HTTP 协议错误码大全

HTTP 协议错误码大全

weixin_48095014的博客 1196

HTTP协议基础知识总结

HTTP协议基础知识总结一. HTTP概念二. HTTP版本三. HTTP特点及优点四. HTTP协议的组成五. HTTP请求报文1. 请求行2. 请求头3. 请求体常见请求头六. HTTP响应报文1. 响应行2. 响应头3. 响应体常见响应头常见状态码及状态描述1xx 指示信息, 表示请求已接收, 继续处理2xx 成功, 表示请求已被成功接受, 处理3xx 重定向4xx 客户端错误5xx 服务器...

Shawn Jeon`s blog 1496

HTTP协议知识点总结

最近看到一道与HTTP协议相关题目,感觉对计算机网络协议的知识点有点忘了,赶紧查阅资料对之前学习过的计算机网络知识做一个复习与总结。 HTTP的概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。 HTTP协议,又称超文本传输协议(Hypertext transfer protocol),是一种详细规定了浏览器和万维网(WWW,World Wide Web)服务器之间互...

小晓晓晓林的博客 2132
上一篇: 鲜为人知的HTTP协议头字段详解大全
下一篇: 深度解析某头条的一道面试题
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值