开发过程中可能存在的安全漏洞

摘要

平时开发系统的过程中,可能会不经意间制造一些安全漏洞,都会汇总在这里。

一、搜索漏洞

我们平时使用 Mybatis 开发搜索接口时,常常会判断参数不不空才拼接 WHERE 条件语句,这可能导致黑客在不传入任何参数是可以直接获取所有数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<select id="queryCockpit" resultType="com.linewell.aioc.event.dto.cockpit.CockpitIndexDTO">
SELECT
ci.id,
ci.NAME,
ci.full_name,
ci.page_id,
cp.NAME AS pageName,
cp.url AS pageUrl
FROM
cockpit_index ci
LEFT JOIN cockpit_page cp ON ci.page_id = cp.id
WHERE
<if test="param != null and param != ''">
ci.full_name LIKE CONCAT('%',#{param},'%')
or ci.name LIKE CONCAT('%',#{param},'%')
</if>
</select>

应该在给判断加一个 ELSE 分支,如 else WHERE FALSE

二、前端登录重定向漏洞

前端登录token连接跳转到 登录页面已办都会带上重定向地址,登录成功后,登录页面也会不加判断直接重定向到目标地址,
用户可以根据其他用户的的页面历史路由,修改重定向的地址,随意进入本用户不能访问的路由

1
2
3
4
5
6
7
8
9
10

router.beforeEach((to, from, next) => {
const token = store.state.user.accessToken;
if (token || setting.routesWhiteList.includes(to.path)) {
next();
} else {
next(`${setting.routeLogin}?redirect=${to.fullPath}`); // 否则全部重定向到登录页
}
});