《Java安全编码标准》一1.2 注入攻击

简介: 本节书摘来自华章出版社《Java安全编码标准》一书中的第1章,第1.2节,作者 (美)Fred Long,Dhruv Mohindra,Robert C. Seacord,Dean F. Sutherland,David Svoboda,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.2 注入攻击

当一个组件从超出该组件受信边界的外部数据源接收数据的时候,这些数据可能是恶意的,并且会导致注入攻击,如图1-1所示。
image

程序必须采取以下几个步骤,从而通过受信边界而收到的数据确保是适当的并且是没有恶意的。这些步骤包括:
验证(Validation):验证是指这样一个过程,该过程可以保证输入的数据处在预先设定好的有效的程序输入范围之内。这就要求这些输入符合类型和数值范围的要求,并且对各个类别和子系统来说,输入不会发生变化。
净化(Sanitization):在许多情况下,数据是从另一个受信域直接传递到组件当中来的。数据净化的过程是指,通过这个过程,可以确保数据符合接收该数据的子系统对数据的要求。数据净化也涉及如何确保数据符合安全性的要求,在这些要求中,需要考虑数据泄漏问题,或者需考虑在数据输出跨出受信边界的时候,敏感数据的暴露问题。净化可以通过消除不必要的字符输入来完成,比如对字符进行删除、更换、编码或转义操作。净化可能在数据输入(输入净化)之后或数据跨受信边界传输之前(输出净化)进行。数据净化和输入验证可能是并存的,并且是相互补充的。关于数据净化的详细情况说明,请参见规则IDS01-J。
标准化(Canonicalization)和归一化(Normalization):标准化的过程是指将输入最小损失地还原成等价的最简单的已知形式。归一化的过程是一个有损转换的过程,在这个过程中,输入数据会转化成用最简单的(可预期)形式来表现。标准化和归一化必须在数据验证之前进行,从而防止攻击者利用验证例程来除去不合法的字符,并由此构建一个不合法的(或者是有潜在恶意的)字符序列。关于这方面的更多信息,请参见规则IDS02-J。归一化应当在所有用户输入都收集完整之后进行。不要归一化那些不完整的数据,或者将经过归一化处理的数据和没有经过归一化处理的数据合并起来。
有一种情况需要特殊考虑,就是复杂的子系统接受代表特定操作命令或指令的字符串数据的问题。组件接受这些字符串数据的时候,在这些字符串数据中,可能包含的特殊字符会触发命令或动作,从而造成软件的安全漏洞。
以下是一些可以对命令进行解释或者对指令进行操作的组件的例子:
操作系统的命令解释器(见规则IDS07-J)
具备SQL兼容接口的数据库
XML解析器
XPath评估器
基于轻量级目录访问协议(Lightweight Directory Access Protocol, LDAP)的目录服务
脚本引擎
正则表达式(regex)编译器
在必须要把数据发送到处在另一个受信域的组件的时候,发送者必须确保数据经过适当的编码处理,从而在穿过受信边界的时候,满足数据接收者受信边界的要求。例如,尽管一个系统已经被恶意代码或数据渗透了,但如果系统的输出是经过适当转义和编码处理的,那么还是可以避免许多攻击的。

相关文章
|
1月前
|
人工智能 监控 安全
Java智慧工地(源码):数字化管理提升施工安全与质量
随着科技的发展,智慧工地已成为建筑行业转型升级的重要手段。依托智能感知设备和云物互联技术,智慧工地为工程管理带来了革命性的变革,实现了项目管理的简单化、远程化和智能化。
55 5
|
4月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
88 2
|
4月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
87 4
|
5月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
99 5
|
5月前
|
安全 Java 编译器
Java 泛型深入解析:类型安全与灵活性的平衡
Java 泛型通过参数化类型实现了代码重用和类型安全,提升了代码的可读性和灵活性。本文深入探讨了泛型的基本原理、常见用法及局限性,包括泛型类、方法和接口的使用,以及上界和下界通配符等高级特性。通过理解和运用这些技巧,开发者可以编写更健壮和通用的代码。
|
6月前
|
安全 Java API
java安全特性
java安全特性
50 8
|
6月前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
141 11
|
6月前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
250 11
|
7月前
|
存储 安全 Java
【数据保护新纪元】Java编程:揭秘黑客攻击背后的防线,打造坚不可摧的安全堡垒!
【8月更文挑战第30天】本文全面介绍了Java安全性编程的基本概念和实战技巧,涵盖输入验证、错误处理、数据加密、权限控制及安全审计等方面。通过具体示例,帮助开发者有效预防安全风险,提升程序的稳定性和可靠性,保护用户数据安全。适合希望提升Java应用安全性的开发者参考。
67 4
|
7月前
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。