专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
51好读  ›  专栏  ›  ImportNew

保障接口安全的 11 个方法

ImportNew  · 公众号  · Java  · 2024-01-21 20:24

正文

请到「今天看啥」查看全文



有些地方需要用 html 的格式显示用户输入的内容,比如文章详情页或者合同详情页,用户可以自定义文案和样式。


这些地方如果我们不做处理,可能会遭受 XSS(Cross Site Scripting)攻击,也就是跨站脚本攻击。


攻击者可以在输入的内容中,增加脚本,比如: ,这样在访问合同详情页时,会弹出一个不需要的窗口,攻击者甚至可以引导用户访问一些恶意的链接。


由此,我们需要对用户输入内容中的一些特殊标签做转义。


下面这张图中列出了需要转义的常见字符和转义后的字符:



我们可以自定义一个转义注解,打上该注解的字段,表示需要转义。


有个专门的 AOP 拦截器,将用户的原始内容,转换成转义后的内容。


保存到数据库中是转义之后的内容。


除此之外,为了防止 SQL 注入的情况,也需要将用户输入的参数做 SQL 语句方面的转义。


4 做权限控制


我们需要对接口做权限控制。


主要包含了下面 3 种情况。


4.1 校验是否登录


对于用些公共数据,比如:外部分类,所有人都能够看到,不用登录也能看到。


对于这种接口,则不用校验登录。


而对于有些查看内部分类的接口,需要用户登录之后,才能访问。


这种情况就需要校验登录了。


可以从当前用户上下文中获取用户信息,校验用户是否登录。


如果用户登录了,当前用户上下文中该用户的信息不为空。


否则,如果用户没登录,则当前用户上下文中该用户的信息为空。


4.2 接口功能权限控制


对于有些重要的接口,比如订单审核接口,只有拥有订单审核权限的运营账号,才有权限访问该接口。


我们需要对该接口做功能权限控制。


可以自定义一个权限注解,在注解上可以添加权限点。


在网关层有个拦截器,会根据当前请求的用户的权限,去跟请求的接口的权限做匹配,只有匹配上次允许访问该接口。


4.3 接口数据权限控制


对于有些订单查询接口,普通运营只能查看普通用户的数据。


而运营经理可以查看普通用户和 VIP 用户的数据。


这种情况我们需要对该订单查询接口做数据权限控制。


不同的角色,能够查看的数据范围不同。


可以在查询数据时,在 SQL 语句中动态拼接过滤数据权限的 SQL


5 加验证码


对于一些非常重要的接口,在做接口设计的时候,要考虑恶意用户刷接口的情况。

最早的用户注册接口,是需要用图形验证码校验的,比如下面这样的:



用户只需要输入:账号名称、密码和验证码即可,完成注册。







请到「今天看啥」查看全文