代码审计:必须要知道的注入型漏洞风险参数来源
字数 1415 2025-08-19 12:40:39
代码审计中注入型漏洞风险参数来源详解
一、代码审计概述
代码审计是通过检查源代码中的安全缺陷,发现程序存在的安全隐患或编码不规范问题,对程序源代码进行逐条检查和分析的过程。
二、注入型漏洞风险参数来源
1. Request域相关参数
1.1 常见注解
@RequestBody: 用于接收HTTP请求体中的数据@ResponseBody: 用于将方法返回的对象写入HTTP响应体@RequestParam: 用于获取请求参数@PathVariable: 用于获取URL路径中的变量@PathParam: JAX-RS注解,用于获取路径参数@QueryParam: JAX-RS注解,用于获取查询参数
1.2 Servlet API方法
request.getParameter(): 获取请求参数值Request.getQueryString(): 获取查询字符串- 示例:
http://localhost/test.do?a=b&c=d&e=f返回a=b&c=d&e=f
- 示例:
request.getRequestURI(): 返回除去host(域名或IP)部分的路径request.getRequestURL(): 返回完整路径request.getContextPath(): 返回工程名部分(若工程映射为/则返回空)request.getServletPath(): 返回除去host和工程名部分的路径request.getScheme(): 返回协议名称(默认http)request.getServerName(): 返回浏览器中显示的主机名request.getServerPort(): 获取服务器端口号request.getPathInfo():- 示例:
http://localhost:8080/dwr/servlet/test/joejoe1991/a.html返回/joejoe1991/a.html
- 示例:
request.getInputStream(): 获取POST请求数据
2. 客户端URL相关属性
通过window.location对象可获取以下URL属性:
hash: 从井号(#)开始的URL(锚点)host: 主机名和端口号hostname: 主机名href: 完整URLpathname: URL路径部分port: 端口号protocol: 协议search: 查询字符串
三、关键审计点
-
参数来源追踪:审计时应特别关注从上述来源获取的参数,这些往往是注入攻击的入口点
-
未过滤的输入:检查这些参数是否经过适当的验证和过滤
-
直接拼接SQL:关注这些参数是否被直接用于SQL语句拼接
-
动态执行代码:检查这些参数是否被用于动态执行代码(如eval等)
-
文件操作:检查这些参数是否被用于文件路径操作
四、防御建议
- 对所有来自客户端的输入进行严格验证和过滤
- 使用参数化查询而非字符串拼接
- 实施最小权限原则
- 对特殊字符进行转义处理
- 使用安全的API替代危险函数
五、总结
在代码审计过程中,注入型漏洞的风险参数主要来自请求域的各种参数获取方式,包括注解、Servlet API方法以及客户端URL属性。审计时应重点关注这些参数的处理方式,确保没有直接使用未经验证的用户输入进行敏感操作。