xss攻击、越权、跨站请求伪造、信息泄密等代码安全问题简单汇总

1、路径遍历

奇安信安全漏洞扫描扫出来的结果,个人感觉不是很智能。
接收文件的接口,不允许调用创建文件或删除文件的方法。
接收文件时可以用MultipartFile接收,然后不再创建临时文件,尽量使用I/O流进行处理。

6、不安全的框架绑定

对传入接口的参数应该进行过滤,比如下面的代码,创建一个新用户,如果多传一个admin=true,就变成创建一个管理员了。
应该对传进来参数使用VO进行封装,避免多传参数额外的参数。
同理,响应给前端的字段也应该使用DTO封装,避免爆暴露所有字段名称。
反面例子:用户登录成功后将用户所有信息、字段响应回去。

9、修改密码时,根据传进来的id修改对应用的id

当前用户的id不能直接暴露出去,应该通过后端从session或者redis中获取。对当前用户的操作都不能通过传进来的id进行处理。

@SysLog(name = "更改密码")
@PostMapping("/changePass")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "用户id", required = true),
        @ApiImplicitParam(name = "newPass", value = "新密码", required = true),
        @ApiImplicitParam(name = "oldPass", value = "旧密码", required = true)
@ResponseBody
public MResponse changePass(@RequestParam("id") String id,
                            @RequestParam("oldPass") String oldPass,
                            @RequestParam("newPass") String newPass) {

10、登录时,发短信验证码接口和校验密码接口分开成两个,致使可以绕过手机号码

先访问验证密码接口,验证成功后返回用户手机号码,再携带获取的手机号码访问发送短信有验证码的接口。用户可以在验证密码成功后,另外发送一个手机号码访问发短信验证码的接口,从而绕过给账号用户本人发送短信这个步骤。
应该在一个接口里校验密码成功后立马发送短信。

11、登录时,验证短信验证码和执行登录接口分开成两个,致使可以绕过验证短信验证码

同上面,先访问验证短信验证码的接口,访问通过后,再访问执行登录的接口。用户可以绕过短信验证码验证,直接访问执行登录的接口。
应该在同一个接口里面完成两个步骤,验证短信后立马执行登录。

13、横向越权漏洞

横向越权:攻击者尝试访问与他拥有相同权限的其他用户的资源。
原因:查询、编辑、删除等操作的时候是需要传递响应数据id的,传入不是当前用户管理的id,造成横向越权。
对策:对目标数据进行判断,判断是否为当前用户有权限操作的数据。

14、纵向越权漏洞

纵向越权:攻击者尝试访问不属于他自己权限的资源
原因:隐藏菜单,按钮,从而限制用户访问某些接口的权限,但是用户可以不使用菜单、按钮,而直接在地址栏访问接口,造成纵向越权。
对策:给每个接口,每个用户建立数据访问权限,用户须拥有访问该接口权限,才允许访问。

15、跨站请求伪造

攻击者伪造一条删除数据的链接,引诱正常使用的管理员点击。管理员点击之后直接访问删除数据的链接,造成数据丢失。
对策:判断链接是否是从我们的静态页面来访问过来,如果不是,则拦截。
referer的作用:告诉服务器这次请求是从哪个页面链接过来的,如果是浏览器直接访问,则为空。