SCW Icons
hero bg no divider
Blog

程序员征服安全:分享与学习系列-不安全的反序列化

Jaap Karan Singh
Published Sep 20, 2019
Last updated on Mar 10, 2026

根据应用程序的不同,序列化过程可能会一直发生。该术语用于描述何时将数据结构或对象状态转换为可以存储或可能作为通信发送的格式。反序列化与此过程相反,将现在的结构化数据转换为存储前的对象或数据字符串。

每当应用程序将反序列化的数据视为可信数据时,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们就可以执行各种恶意活动,例如代码注入、拒绝服务攻击,或者干脆更改数据,让自己在应用程序中获得一些优势,例如降低对象的价格或提升权限。

在本集中,我们将学习:

  • 攻击者如何利用不安全的反序列化
  • 为什么不安全的反序列化很危险
  • 可以修复此漏洞的技术。

攻击者如何利用不安全的反序列化?

如今,最流行的序列化数据格式是 JSON,尽管 XML 紧随其后。不少编程语言还提供了自己的序列化数据的方法,这些方法通常包含比 JSON 或 XML 更多的功能。无论如何,如果开发人员对应用程序进行编程,将反序列化数据视为可信输入,而不是遵循本系列其他博客的旧口头禅,特别是:“永远不要相信用户的输入!”

用户输入永远不可信任,因为用户可以在这些字符串中插入代码,接收服务器可能会意外执行这些代码。而且,由于原始反序列化数据有时也可以被访问和利用,因此它需要属于同样的不信任类别。

例如,如果论坛应用程序使用 PHP 对象序列化来保存包含用户身份和角色的 cookie,则可以对其进行操作。恶意用户可能会改为将其 “用户” 角色更改为 “管理员”。或者,他们可以使用数据字符串提供的开口来注入代码,服务器在处理 “可信” 数据时可能会误解并运行这些代码。

为什么不安全的反序列化很危险?

的确,这种攻击需要黑客有一点技巧,有时还需要反复试验,同时攻击者了解服务器将从他们操纵的反序列化数据中接受哪种代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它赋予了足够熟练使用该漏洞的黑客的潜在力量。

根据反序列化数据的使用方式,可以采用任意数量的攻击,包括我们在之前的博客中介绍的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨站点脚本、拒绝服务、访问控制劫持,当然还有 SQL 和 XML 注入攻击的门户。它基本上打开了一个起点,声明所有被反序列化的数据都是可信的,并让攻击者尝试利用它。

消除不安全的反序列化

为防止不安全的反序列化,组织可以做的最安全的事情是限制应用程序接受反序列化数据。但是,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来防御这种攻击。

如果可能,可以将数据消毒为数值之类的东西。这可能无法完全阻止漏洞,但会阻止代码注入。更好的办法是只需要对反序列化数据(例如数字签名)进行某种形式的完整性检查,这样可以确保数据字符串未被操纵。并且所有反序列化过程都应隔离并在低权限环境中运行。

这些保护措施到位后,请务必记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果用户在日志中触发了多个反序列化错误,则很好地表明他们要么是恶意内部人士,要么已被黑客入侵或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定之类的事情。

无论你使用哪种工具来对抗不安全的反序列化,都要记住,从本质上讲,这些数据可能已被用户触摸或操纵。永远不要相信它。

有关使用存在已知漏洞的组件的更多信息

要进一步阅读,你可以看看 OWASP 怎么说 关于不安全的反序列化。你还可以使用以下方法来测试你新获得的防御知识 免费展示柜 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

查看资源
查看资源

每当应用程序将反序列化的数据视为可信数据时,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们就可以执行各种恶意活动,例如代码注入、拒绝服务攻击或提升权限。

对更多感兴趣?

Jaap Karan Singh is a Secure Coding Evangelist, Chief Singh and co-founder of Secure Code Warrior.

learn more

Secure Code Warrior可以帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全放在首位的文化。无论您是 AppSec 经理、开发人员、首席信息安全官还是任何与安全相关的人,我们都可以帮助您的组织降低与不安全代码相关的风险。

预订演示
分享到:
linkedin brandsSocialx logo
作者
Jaap Karan Singh
Published Sep 20, 2019

Jaap Karan Singh is a Secure Coding Evangelist, Chief Singh and co-founder of Secure Code Warrior.

分享到:
linkedin brandsSocialx logo

根据应用程序的不同,序列化过程可能会一直发生。该术语用于描述何时将数据结构或对象状态转换为可以存储或可能作为通信发送的格式。反序列化与此过程相反,将现在的结构化数据转换为存储前的对象或数据字符串。

每当应用程序将反序列化的数据视为可信数据时,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们就可以执行各种恶意活动,例如代码注入、拒绝服务攻击,或者干脆更改数据,让自己在应用程序中获得一些优势,例如降低对象的价格或提升权限。

在本集中,我们将学习:

  • 攻击者如何利用不安全的反序列化
  • 为什么不安全的反序列化很危险
  • 可以修复此漏洞的技术。

攻击者如何利用不安全的反序列化?

如今,最流行的序列化数据格式是 JSON,尽管 XML 紧随其后。不少编程语言还提供了自己的序列化数据的方法,这些方法通常包含比 JSON 或 XML 更多的功能。无论如何,如果开发人员对应用程序进行编程,将反序列化数据视为可信输入,而不是遵循本系列其他博客的旧口头禅,特别是:“永远不要相信用户的输入!”

用户输入永远不可信任,因为用户可以在这些字符串中插入代码,接收服务器可能会意外执行这些代码。而且,由于原始反序列化数据有时也可以被访问和利用,因此它需要属于同样的不信任类别。

例如,如果论坛应用程序使用 PHP 对象序列化来保存包含用户身份和角色的 cookie,则可以对其进行操作。恶意用户可能会改为将其 “用户” 角色更改为 “管理员”。或者,他们可以使用数据字符串提供的开口来注入代码,服务器在处理 “可信” 数据时可能会误解并运行这些代码。

为什么不安全的反序列化很危险?

的确,这种攻击需要黑客有一点技巧,有时还需要反复试验,同时攻击者了解服务器将从他们操纵的反序列化数据中接受哪种代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它赋予了足够熟练使用该漏洞的黑客的潜在力量。

根据反序列化数据的使用方式,可以采用任意数量的攻击,包括我们在之前的博客中介绍的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨站点脚本、拒绝服务、访问控制劫持,当然还有 SQL 和 XML 注入攻击的门户。它基本上打开了一个起点,声明所有被反序列化的数据都是可信的,并让攻击者尝试利用它。

消除不安全的反序列化

为防止不安全的反序列化,组织可以做的最安全的事情是限制应用程序接受反序列化数据。但是,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来防御这种攻击。

如果可能,可以将数据消毒为数值之类的东西。这可能无法完全阻止漏洞,但会阻止代码注入。更好的办法是只需要对反序列化数据(例如数字签名)进行某种形式的完整性检查,这样可以确保数据字符串未被操纵。并且所有反序列化过程都应隔离并在低权限环境中运行。

这些保护措施到位后,请务必记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果用户在日志中触发了多个反序列化错误,则很好地表明他们要么是恶意内部人士,要么已被黑客入侵或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定之类的事情。

无论你使用哪种工具来对抗不安全的反序列化,都要记住,从本质上讲,这些数据可能已被用户触摸或操纵。永远不要相信它。

有关使用存在已知漏洞的组件的更多信息

要进一步阅读,你可以看看 OWASP 怎么说 关于不安全的反序列化。你还可以使用以下方法来测试你新获得的防御知识 免费展示柜 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

查看资源
查看资源

填写下面的表格下载报告

我们希望获得您的许可,以便向您发送有关我们的产品和/或相关安全编码主题的信息。我们将始终非常谨慎地对待您的个人信息,绝不会出于营销目的将其出售给其他公司。

提交
scw success icon
scw error icon
要提交表单,请启用 “分析” Cookie。完成后,可以随意再次禁用它们。

根据应用程序的不同,序列化过程可能会一直发生。该术语用于描述何时将数据结构或对象状态转换为可以存储或可能作为通信发送的格式。反序列化与此过程相反,将现在的结构化数据转换为存储前的对象或数据字符串。

每当应用程序将反序列化的数据视为可信数据时,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们就可以执行各种恶意活动,例如代码注入、拒绝服务攻击,或者干脆更改数据,让自己在应用程序中获得一些优势,例如降低对象的价格或提升权限。

在本集中,我们将学习:

  • 攻击者如何利用不安全的反序列化
  • 为什么不安全的反序列化很危险
  • 可以修复此漏洞的技术。

攻击者如何利用不安全的反序列化?

如今,最流行的序列化数据格式是 JSON,尽管 XML 紧随其后。不少编程语言还提供了自己的序列化数据的方法,这些方法通常包含比 JSON 或 XML 更多的功能。无论如何,如果开发人员对应用程序进行编程,将反序列化数据视为可信输入,而不是遵循本系列其他博客的旧口头禅,特别是:“永远不要相信用户的输入!”

用户输入永远不可信任,因为用户可以在这些字符串中插入代码,接收服务器可能会意外执行这些代码。而且,由于原始反序列化数据有时也可以被访问和利用,因此它需要属于同样的不信任类别。

例如,如果论坛应用程序使用 PHP 对象序列化来保存包含用户身份和角色的 cookie,则可以对其进行操作。恶意用户可能会改为将其 “用户” 角色更改为 “管理员”。或者,他们可以使用数据字符串提供的开口来注入代码,服务器在处理 “可信” 数据时可能会误解并运行这些代码。

为什么不安全的反序列化很危险?

的确,这种攻击需要黑客有一点技巧,有时还需要反复试验,同时攻击者了解服务器将从他们操纵的反序列化数据中接受哪种代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它赋予了足够熟练使用该漏洞的黑客的潜在力量。

根据反序列化数据的使用方式,可以采用任意数量的攻击,包括我们在之前的博客中介绍的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨站点脚本、拒绝服务、访问控制劫持,当然还有 SQL 和 XML 注入攻击的门户。它基本上打开了一个起点,声明所有被反序列化的数据都是可信的,并让攻击者尝试利用它。

消除不安全的反序列化

为防止不安全的反序列化,组织可以做的最安全的事情是限制应用程序接受反序列化数据。但是,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来防御这种攻击。

如果可能,可以将数据消毒为数值之类的东西。这可能无法完全阻止漏洞,但会阻止代码注入。更好的办法是只需要对反序列化数据(例如数字签名)进行某种形式的完整性检查,这样可以确保数据字符串未被操纵。并且所有反序列化过程都应隔离并在低权限环境中运行。

这些保护措施到位后,请务必记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果用户在日志中触发了多个反序列化错误,则很好地表明他们要么是恶意内部人士,要么已被黑客入侵或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定之类的事情。

无论你使用哪种工具来对抗不安全的反序列化,都要记住,从本质上讲,这些数据可能已被用户触摸或操纵。永远不要相信它。

有关使用存在已知漏洞的组件的更多信息

要进一步阅读,你可以看看 OWASP 怎么说 关于不安全的反序列化。你还可以使用以下方法来测试你新获得的防御知识 免费展示柜 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

观看网络研讨会
开始吧
learn more

点击下面的链接并下载此资源的PDF。

Secure Code Warrior可以帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全放在首位的文化。无论您是 AppSec 经理、开发人员、首席信息安全官还是任何与安全相关的人,我们都可以帮助您的组织降低与不安全代码相关的风险。

查看报告预订演示
查看资源
分享到:
linkedin brandsSocialx logo
对更多感兴趣?

分享到:
linkedin brandsSocialx logo
作者
Jaap Karan Singh
Published Sep 20, 2019

Jaap Karan Singh is a Secure Coding Evangelist, Chief Singh and co-founder of Secure Code Warrior.

分享到:
linkedin brandsSocialx logo

根据应用程序的不同,序列化过程可能会一直发生。该术语用于描述何时将数据结构或对象状态转换为可以存储或可能作为通信发送的格式。反序列化与此过程相反,将现在的结构化数据转换为存储前的对象或数据字符串。

每当应用程序将反序列化的数据视为可信数据时,就会发生不安全的反序列化。如果用户能够修改新重建的数据,他们就可以执行各种恶意活动,例如代码注入、拒绝服务攻击,或者干脆更改数据,让自己在应用程序中获得一些优势,例如降低对象的价格或提升权限。

在本集中,我们将学习:

  • 攻击者如何利用不安全的反序列化
  • 为什么不安全的反序列化很危险
  • 可以修复此漏洞的技术。

攻击者如何利用不安全的反序列化?

如今,最流行的序列化数据格式是 JSON,尽管 XML 紧随其后。不少编程语言还提供了自己的序列化数据的方法,这些方法通常包含比 JSON 或 XML 更多的功能。无论如何,如果开发人员对应用程序进行编程,将反序列化数据视为可信输入,而不是遵循本系列其他博客的旧口头禅,特别是:“永远不要相信用户的输入!”

用户输入永远不可信任,因为用户可以在这些字符串中插入代码,接收服务器可能会意外执行这些代码。而且,由于原始反序列化数据有时也可以被访问和利用,因此它需要属于同样的不信任类别。

例如,如果论坛应用程序使用 PHP 对象序列化来保存包含用户身份和角色的 cookie,则可以对其进行操作。恶意用户可能会改为将其 “用户” 角色更改为 “管理员”。或者,他们可以使用数据字符串提供的开口来注入代码,服务器在处理 “可信” 数据时可能会误解并运行这些代码。

为什么不安全的反序列化很危险?

的确,这种攻击需要黑客有一点技巧,有时还需要反复试验,同时攻击者了解服务器将从他们操纵的反序列化数据中接受哪种代码或漏洞。也就是说,这是一个经常被利用的漏洞,因为它赋予了足够熟练使用该漏洞的黑客的潜在力量。

根据反序列化数据的使用方式,可以采用任意数量的攻击,包括我们在之前的博客中介绍的许多攻击。不安全的反序列化可以成为远程跨代码注入、跨站点脚本、拒绝服务、访问控制劫持,当然还有 SQL 和 XML 注入攻击的门户。它基本上打开了一个起点,声明所有被反序列化的数据都是可信的,并让攻击者尝试利用它。

消除不安全的反序列化

为防止不安全的反序列化,组织可以做的最安全的事情是限制应用程序接受反序列化数据。但是,这可能不可能或不现实,但不用担心,因为还有其他技术可以用来防御这种攻击。

如果可能,可以将数据消毒为数值之类的东西。这可能无法完全阻止漏洞,但会阻止代码注入。更好的办法是只需要对反序列化数据(例如数字签名)进行某种形式的完整性检查,这样可以确保数据字符串未被操纵。并且所有反序列化过程都应隔离并在低权限环境中运行。

这些保护措施到位后,请务必记录所有失败的反序列化尝试,以及来自反序列化数据的容器或服务器的网络活动。如果用户在日志中触发了多个反序列化错误,则很好地表明他们要么是恶意内部人士,要么已被黑客入侵或窃取。你甚至可以考虑对不断触发反序列化错误的用户进行自动锁定之类的事情。

无论你使用哪种工具来对抗不安全的反序列化,都要记住,从本质上讲,这些数据可能已被用户触摸或操纵。永远不要相信它。

有关使用存在已知漏洞的组件的更多信息

要进一步阅读,你可以看看 OWASP 怎么说 关于不安全的反序列化。你还可以使用以下方法来测试你新获得的防御知识 免费展示柜 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

目录

下载PDF
查看资源
对更多感兴趣?

Jaap Karan Singh is a Secure Coding Evangelist, Chief Singh and co-founder of Secure Code Warrior.

learn more

Secure Code Warrior可以帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全放在首位的文化。无论您是 AppSec 经理、开发人员、首席信息安全官还是任何与安全相关的人,我们都可以帮助您的组织降低与不安全代码相关的风险。

预订演示下载
分享到:
linkedin brandsSocialx logo
资源中心

帮助您入门的资源

更多帖子
资源中心

帮助您入门的资源

更多帖子