
编码员征服安全。分享与学习系列 - 不安全的反序列化
根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。
Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。
预定一个演示Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。


根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。
根据不同的应用,序列化的过程可能一直在发生。它是用来描述每当数据结构或对象状态被转化为可以存储或可能作为通信发送的格式时的术语。反序列化是这个过程的反面,把现在的结构化数据,转回存储前的对象或数据字符串。
只要应用程序将被反序列化的数据视为可信数据,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们可以进行各种恶意活动,如代码注入、拒绝服务攻击或简单地改变数据,使自己在应用中获得一些优势,如降低对象的价格或提升他们的权限。
在这一集里,我们将学习。
- 攻击者如何利用不安全的反序列化技术
- 为什么不安全的反序列化是危险的
- 可以修复这个漏洞的技术。
攻击者如何利用不安全的反序列化?
这些天,最流行的数据序列化格式是JSON,尽管XML紧随其后。相当多的编程语言也提供他们自己的数据序列化方法,这些方法通常包含比JSON或XML更多的功能。在任何情况下,如果开发人员在编程时将反序列化的数据视为可信的输入,而不是遵循本系列其他博客中的老套路,具体来说,就会出现问题。"永远不要相信用户输入!"
用户输入是永远不可信任的,因为用户可以在这些字符串中插入代码,这可能会意外地被接收服务器执行。而且,由于原始的反序列化数据有时也可以被访问和利用,所以它也需要归入同样的不被信任的类别。
例如,如果一个论坛应用使用PHP对象序列化来保存一个包含用户身份和角色的cookie,那么它就可以被操纵。一个恶意的用户可能会把他们的 "用户 "角色改为 "管理员"。或者,他们可以使用数据字符串提供的开口来注入代码,这可能会被服务器在处理 "可信 "数据时误解并运行。
为什么不安全的反序列化是危险的?
诚然,这种攻击需要黑客有一定的技巧,有时还需要试错,而攻击者要了解服务器会从他们操纵的、反序列化的数据中接受什么样的代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它给了足够熟练的黑客以潜在的力量。
根据反序列化数据的使用方式,可以采用任何数量的攻击,包括我们在以前的博客中提到的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨网站脚本、拒绝服务、访问控制劫持,当然还有SQL和XML注入攻击的入口。它基本上打开了一个启动点,宣布所有被反序列化的数据都是可信的,并让攻击者尝试利用它。
消除不安全的反序列化
企业为防止不安全的反序列化所能做的最安全的事情是限制应用程序接受反序列化的数据。然而,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来抵御这种攻击。
如果可能的话,可以对数据进行消毒处理,使之成为类似于数值的东西。这可能无法完全阻止漏洞,但可以防止代码注入的发生。更好的是简单地要求对反序列化的数据进行某种形式的完整性检查,如数字签名,这可以确保数据字符串没有被篡改。所有的反序列化过程应该被隔离,并在低权限的环境中运行。
一旦你有了这些保护措施,要确保记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果一个用户在日志中触发了几个以上的反序列化错误,这很好地表明他们要么是一个恶意的内部人员,要么是他们的证书被黑客攻击或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定等措施。
无论你采用哪种工具来对抗不安全的反序列化,请记住,在核心部分,这是可能被用户触摸过或操纵过的数据。永远不要相信它。
关于使用有已知漏洞的组件的更多信息
要进一步阅读,你可以看看OWASP对不安全的反序列化是怎么说的。你还可以通过Secure Code Warrior 平台的免费展示来测试你新发现的防御知识,该平台可以培训网络安全团队成为最终的网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。
资源
OpenText 应用程序安全性的强大功能 + Secure Code Warrior
OpenText Application Security and Secure Code Warrior combine vulnerability detection with AI Software Governance and developer capability. Together, they help organizations reduce risk, strengthen secure coding practices, and confidently adopt AI-driven development.
Secure Code Warrior corporate overview
Secure Code Warrior is an AI Software Governance platform designed to enable organizations to safely adopt AI-driven development by bridging the gap between development velocity and enterprise security. The platform addresses the "Visibility Gap," where security teams often lack insights into shadow AI coding tools and the origins of production code.
安全代码培训主题和内容
Our industry-leading content is always evolving to fit the ever changing software development landscape with your role in mind. Topics covering everything from AI to XQuery Injection, offered for a variety of roles from Architects and Engineers to Product Managers and QA. Get a sneak peek of what our content catalog has to offer by topic and role.
资源
Observe and Secure the ADLC: A Four-Point Framework for CISOs and Development Teams Using AI
While development teams look to make the most of GenAI’s undeniable benefits, we’d like to propose a four-point foundational framework that will allow security leaders to deploy AI coding tools and agents with a higher, more relevant standard of security best practices. It details exactly what enterprises can do to ensure safe, secure code development right now, and as agentic AI becomes an even bigger factor in the future.






