【Java面试笔记:安全】31.你了解Java应用开发中的注入攻击吗?
在Java应用开发中,注入攻击是一种常见的安全威胁,攻击者通过将恶意代码或命令注入到应用程序中,利用不安全的输入处理机制来破坏系统或窃取数据。
1. 注入攻击类型
1.SQL注入
- 原理:攻击者通过用户输入注入恶意SQL片段,篡改原查询逻辑(如
" or ""="
绕过密码验证)。 - 示例:拼接动态SQL导致条件永真(
OR ""=""
)或执行破坏性操作(如;DELETE
)。String userInput = request.getParameter("userId"); String sql = "SELECT * FROM users WHERE id = '" + userInput + "'"; // 危险:直接拼接输入 //若用户输入为 ' OR '1'='1,会导致查询所有用户数据。
- 防范:
- 使用
PreparedStatement
参数化查询。 - 输入校验(限制特殊字符)。
- 数据库权限最小化(避免使用高权限账户)。
- 使用ORM框架(如
Hibernate、MyBatis
)并避免手动拼接SQL。
- 使用
2.操作系统命令注入
- 原理:通过用户输入注入恶意系统命令(如
input_file_name;rm -rf /*
),常见于调用命令行工具时。 - 场景:使用
Runtime.exec()
执行外部命令时未校验输入。