安全
熟悉互联网安全架构平台设计例如XSS、SQL注入问题、防盗链等,互联网API接口幂等设计、互联网API接口安全设计等
SQL注入
SQL注入问题是什么?
例如,用户要查询一个姓名包含张三的记录,正常情况下输入“张三”,他懂了点sql,然后输入了 '张三' or 1=1 。 正巧后端sql处理拼接的逻辑是:select * from user where name = '张三' or 1=1。啪,一执行,都返回了。 标准说法是:SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。
sql注入是一个大问题,不过目前例如mybatis-plus等主流框架(使用QueryWrapper)已经规避了这个问题。 框架内部使用PreparedStatement,setObject()赋值时防止SQL注入。
例如:name = '张三' or 1=1
自动会将name的值进行转换为 ''张三' or 1=1' 进行查询。
XSS
这是举一个列子,就是留言板,如果用户输入了<script>alert(1)</script>,那么当其他用户进到页面查看到这个留言时就会执行alert( 1),浏览器中就会出现一个弹窗。
解决方式:新增一个过滤器,判断哪些字段需要过滤、校验,然后判断是否为html等特殊会篡改前端样式的代码,将其替换、转码、甚至报错都可以。
可参考: https://www.cnblogs.com/blbl-blog/p/17188558.html
防盗链
一般是OSS、CDN等静态资源设置防盗链。
好处: 节省带宽和资源消耗。
例如:
某个Bucket配置了白名单Referer为https://10.10.10.10。 用户A在https://10.10.10.10嵌入test.jpg图片,当浏览器请求访问此图片时会带上https://10.10.10.10的Referer,此场景下OSS将允许该请求的访问。
用户B盗用了test.jpg的图片链接并将其嵌入https://192.168.0.0,当浏览器请求访问此图片时会带上https: //192.168.0.0的Referer,此场景下OSS将拒绝该请求的访问。
可参考:https://help.aliyun.com/zh/oss/user-guide/hotlink-protection/
互联网API接口幂等设计
接口幂等性:是为了防止接口因为处理时间、网络等问题,用户多次点击功能操作。
常见幂等性处理方式:
- 接口调用前,先从后端调用一个获取token的接口,然后提交接口时带上token,后端校验token是否有效。
- 前后端约定token策略。例如:xxx-time,前端在提交接口时带上token,后端将token放到缓存中(用于重复校对),进行处理。
互联网API接口安全设计
首先先明确 互联网API接口安全设计是什么。分为2类,1类是已方系统已方调用,另外一类是系统之间对接。
已方系统调用:目前主流的方式就是token验证机制。JWT。
系统间对接: 可参考:https://blog.csdn.net/qq_30823993/article/details/134184890
