Skip to content

Commit 8c0241d

Browse files
authored
Merge pull request #90 from WinterChenS/fix/Incorrect-Access-Control-vulnerability
fix: invorrect access control vuInerability
2 parents 5d73968 + d65b0e8 commit 8c0241d

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/main/java/cn/luischen/interceptor/BaseInterceptor.java

+13-5
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
5959
if (null == user) {
6060
Integer uid = TaleUtils.getCookieUid(request);
6161
if (null != uid) {
62-
// 这里还是有安全隐患, cookie 是可以伪造的
62+
// Cookie 可以伪造,因此要注意
6363
user = userService.getUserInfoById(uid);
6464
request.getSession().setAttribute(WebConst.LOGIN_SESSION_KEY, user);
6565
}
6666
}
6767

68-
// 如果是以 /admin 开头并且不是特定的静态资源文件,则要求认证
68+
// 需要认证的路径,不包括静态资源和登录页面
6969
if (uri.startsWith("/admin")
7070
&& !uri.startsWith("/admin/login")
7171
&& null == user
@@ -75,13 +75,13 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
7575
return false;
7676
}
7777

78-
// 设置 CSRF token 并要求对敏感操作进行校验
78+
// 设置 CSRF token,仅对敏感操作进行 CSRF 校验
7979
if ("GET".equalsIgnoreCase(request.getMethod())) {
8080
String csrfToken = UUID.UU64();
8181
// 默认存储30分钟
8282
cache.hset(Types.CSRF_TOKEN.getType(), csrfToken, uri, 30 * 60);
8383
request.setAttribute("_csrf_token", csrfToken);
84-
} else if ("POST".equalsIgnoreCase(request.getMethod())) {
84+
} else if ("POST".equalsIgnoreCase(request.getMethod()) && isSensitiveOperation(uri)) {
8585
// 检查 POST 请求的 CSRF token
8686
String csrfToken = request.getParameter("_csrf_token");
8787
String expectedUri = cache.hget(Types.CSRF_TOKEN.getType(), csrfToken);
@@ -96,14 +96,22 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
9696
}
9797

9898
/**
99-
* 检查是否为静态资源文件,避免对静态资源文件进行认证
99+
* 检查是否为静态资源文件
100100
*/
101101
private boolean isStaticResource(String uri) {
102102
return uri.startsWith("/admin/css") || uri.startsWith("/admin/images")
103103
|| uri.startsWith("/admin/js") || uri.startsWith("/admin/plugins")
104104
|| uri.startsWith("/admin/editormd");
105105
}
106106

107+
/**
108+
* 检查是否为敏感操作路径(例如:删除、更新等操作)
109+
*/
110+
private boolean isSensitiveOperation(String uri) {
111+
return uri.contains("/delete") || uri.contains("/update") || uri.contains("/create");
112+
}
113+
114+
107115

108116
@Override
109117
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

0 commit comments

Comments
 (0)