美文网首页安全java
后端数据安全经验

后端数据安全经验

作者: 修行者12138 | 来源:发表于2020-08-13 17:23 被阅读0次

前言
1.考虑数据安全是每个程序员开发时应有的意识。
在安全意识较薄弱的公司,不考虑数据安全,大多数情况下也能完成任务,而且开发效率更高,一般也不会出问题。但是作为一个准优秀程序员,开发时最好还是考虑一下数据安全。
2.很难保证绝对的数据安全。
当获取数据的成本大于数据本身的价值时,获取数据就没有意义了。
同样的,当维护数据的成本大于数据本身的价值时,维护也意义不大了。

以下是本人在项目(BS架构)中实际使用的一些数据安全措施,文章持续更新~

发送手机验证码时机

登录场景,输入手机后,发送验证码,然后输入验证码,登录
方案1
发送验证码时,校验手机号是否库内手机号,是的话才发送验证码,否则提示“用户未注册”
方案2
发送验证码时,不校验手机号是否库内,登录时先校验手机号是否库内,再校验验证码是否正确

方案1有安全漏洞,黑客可以扫描发送验证码接口,判断哪些手机号是库内,然后再暴力尝试验证码

如何防止敏感地址被随意访问

对于一些敏感地址,需要用户使用账号密码登陆后,才允许访问。(甚至是双因子登录,即密码+手机验证码)
如何实现未登录或登录过期状态下,访问敏感地址后,跳转到登录页面,登录成功后跳转回敏感地址。
解决方案步骤如下:
1.访问敏感地址时,后端如果判断为未登录状态,在登录地址后拼接上?redirectUrl=敏感地址,如aaa.com?redirectUrl=bbb,然后重定向到拼接后的登录地址
2.前端登录成功后,用正则提取出敏感地址,然后跳转到该地址

如何防止系统敏感文件被随意下载、传播

很多系统有下载文件的功能,如果文件被下载,就可能被随意传播。
解决方案步骤如下:
1.后端使用jacob等组件把文件转换为pdf格式。
2.前端使用pdf.js在线预览pdf文件,仅提供预览按钮,不提供下载按钮。
3.pdf.js支持对文件加水印,可以从后端返回当前登录人身份信息,把信息作为水印打到文件上。
注意事项:
1.默认情况下,pdf.js允许打印和下载,需要禁用这两个功能。(如何禁用问度娘)
2.对比过OpenOffice、POI等若干组件,jacob的转换效果最佳,不足之处是需要部署在window系统,不支持linux系统,且转换成功率不是100%

如何防止敏感文件下载接口被随意访问

解决方案:
在cookie或header中携带token,利用token做权限校验。
本方案不足之处是,如果通过抓包等方式,拿到token,就可以模拟请求下载文件。
优化后的方案步骤如下:
1.依旧使用token做为第一步校验
2.在文件信息表,增加auth字段并初始化为一串随机字符串
3.修改下载文件接口:
新增auth字段作为参数,即文件下载接口url包含auth字段;
每次访问该接口,先比较auth参数与db里的auth字段是否一致,并更新db的auth字段;
如果auth比较结果为一致,才允许下载文件
4.每次调用下载文件接口前,从db查询auth,把auth拼接到下载文件url上,这样即可保证每一个url只能访问一次(即同一个文件,每次访问都需要用不同的url),因为同样的auth只能使用一次,再次使用时与db里的不一致了

如何防止系统上敏感图片的地址被随意访问

正常情况下,浏览器右键复制图片地址后,该地址可以被随意访问。
对于接口的校验,我们一般是在请求头加上有一定有效期的token作为校验依据。
但是前端<img src='xxx'></img>这样的形式,无法携带请求头。
解法方案:
发起对图片的HTTP请求时,默认会携带同域或子域的cookie,可以利用该特性,把token放在cookie中,对cookie中的token做校验。

image.png

然而,在一些特殊场景下,无法对图片做校验,例如使用javamail发送邮件(javamail+freemarker发送HTML格式邮件),且邮件中包含图片(同样是<img src='xxx'></img>这样的形式),如果邮件收件人接收到邮件时,处于未登录状态,图片就无法正常显示,可是如果不对图片做校验,图片地址就可以被随意访问。
解决方案:
将图片转换为BASE64编码,再嵌入到邮件中即可,邮件内容极难被解析。

使用referer请求头做防盗链

当浏览器向服务器发送请求时,一般会带上referer请求头,告诉服务器请求是从哪里链接过来的。
该请求头常用于防盗链,即设置一个ip/域名白名单,通过referer获取发起请求的ip/域名,当ip/域名在白名单内才允许访问资源。

接口入参不要有规律

例如,与外部系统对接时,不要提供download?fileId=xx这样的接口,否则对方知道fileId(或者暴力尝试),就可以获取到其他文件,尤其是fileId有规律时(比如自增主键);
把对方所需范围内的文件,放到sftp服务器,通过sftp方式提供文件,就可以增加安全性。

不要在cookie/session storage/local storage放可以控制权限的字段

例如下图中,session storage中的isAdmin用于控制用户是否管理员,前端根据isAdmin控制按钮的隐藏/显示


image.png

需求:把系统的一部分文件提供给其他系统
方案1:通过接口传输,假如对方伪造入参,就可能获取到本无权获取的文件
方案2:把对方有权访问的文件,同步到单独一台服务器A,对方通过sftp获取A上的文件,以物理方式保证安全性

使用cookie的path属性和httpOnly属性,提高安全性

相关文章

  • 前后端数据交互安全

    原因:因为http是无状态协议, 信息传输是明文, 这会产生一个问题,那就是数据的安全, 如何防止数据被恶意截取修...

  • API认证方式

    前言 APP和后端进行交互的时候,我们都是需要考虑数据的安全性。APP想后端发起一个请求(http/https),...

  • 后端经验

    JVM 源码分析之 Jstat 工具原理完全解读 http://click.aliyun.com/m/83...

  • 面试评估点

    1. 架构 后端架构能力 后端架构经验 2. 业务 后端业务开发能力 后端业务开发经验 3. 性能优化 性能优化意...

  • Java 8 最佳技巧

    作者简介:工会10年后端工作经验,主要记录分享:java学习方法、学习心得等。内容包含Java技术、前后端、数据库...

  • 一篇文章了解并发数据结构

    作者简介:工会10年后端工作经验,主要记录分享:java学习方法、学习心得等。内容包含Java技术、前后端、数据库...

  • 前后端数据传输加解密+请求重发

    目的 确保前后端传输数据的安全性,避免明文显示,避免数据被篡改 方案一: aes、rsa配合加密方案: 对称加密生...

  • 前端加密的简单总结

    数据加密一般是为了前后端在数据交互过程中数据的安全。常见的做法有前端加密之后传输数据和启用HTTPS协议。现在主要...

  • Spring Boot - 数据校验

    [TOC] 简介 后端编程中,通常对于前端传递过来的数据,我们都需要进行校验,确保数据正确且安全。 最直接的方法当...

  • 阿里巴巴35K技术岗,一面三个小时就拿到了?

    个人背景: 工作经验:Java开发3年 学历背景:重庆邮电大学(信息安全专业) 工作经历:Java后端开发(银行外...

网友评论

    本文标题:后端数据安全经验

    本文链接:https://www.haomeiwen.com/subject/slxvdktx.html