0

我有一个 REST 控制器,它有一个deleteStudent接受两个参数 的方法,studentId即 isLongsectionwhich is String

@RequestMapping(value="/rest/deleteStudent/studentId/{studentId}/section/{section}", method = RequestMethod.DELETE)
public  Student deleteStudent(@PathVariable Long studentId, @PathVariable String section){
    return studentService.deleteStudent(studentId ,section);
}

对于上面的代码 checkmarx 抱怨这个参数值流经代码,最终用于修改数据库内容。应用程序不需要为请求更新用户身份验证。这可能会启用跨站点请求伪造 (XSRF)。

我在 Htmlutils.htmlescape部分尝试过(来自spring web util)但没有运气。

如何摆脱这个 checkmarx 问题?

如果字段是 Long 类型,那么 XSRF 和 SQL 注入攻击是如何可能的?

4

2 回答 2

1

您确定它在谈论studentId参数而不是section参数吗?

如果确实如此,我会说这是一个误报。

如果它正在谈论section参数,我根本不会担心您的 SQL 请求是否安全(所以如果您使用 ORM 或准备好的语句等......)。

总的来说,我会说在所有 SQL 注入情况下都是误报。

也就是说,对于CSRF 攻击,您可能确实很容易受到攻击。

如果黑客让管理员加载页面,如果您不实施 CSRF 保护,即使没有访问权限,它也可以删除任何用户帐户。

于 2016-11-30T10:00:18.463 回答
0

来自 Spring Security 的评论(https://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html):

什么时候使用 CSRF 保护?我们的建议是对普通用户可以通过浏览器处理的任何请求使用 CSRF 保护。如果您只创建非浏览器客户端使用的服务,您可能希望禁用 CSRF 保护。

如果您的服务仅由非浏览器客户端使用,您可以从预设中排除 XSRF 查询。

如果没有,Checkmarx 如何检查您是否验证了跨站点请求伪造令牌(Java/Cx/General/Find_XSRF_Sanitize):

  1. 方法调用: getNewXsrfToken, setRpcToken, verifyCSRFToken,isTokenValid
  2. 变量名:“ token ”、“ csrf ”、“ xsrf ”、“nonce”、“ captcha

这些方法调用变量名称用于方法声明。从这些方法声明的这些方法主体内部,所有这些请求都被认为是经过清理的,并从潜在的污染请求列表中删除。

CxQL 查询找到的所有这些源代码元素Find_Interactive_Inputs都是请求。

于 2021-06-07T11:33:41.440 回答