【软件开发规范篇】JAVA后端开发编程安全规范
作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产生了写一个博客专栏想法,介绍当前互联网企业JAVA项目开发如何快速入门。
本文收录于《30天企业JAVA项目开发实战入门》专栏,该专栏内容以当前互联网软件企业中的项目实战为线索,介绍企业JAVA项目开发中涉及到的开发流程、技术、工具、规范要求等等。帮助想从事JAVA开发的大学生或新人,更快的、更好的入门JAVA后端开发工作。
文章目录
- 一、前言
- 二、编程安全规范
- 三、总结
一、前言
现在的软件项目都是团队多人合作一起开发,软件架构的复杂性也需要协同开发完成,如何高效地协同呢?
无规矩不成方圆,无规范难以协同。对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。
本文介绍一下JAVA后端开发,关于编程安全方面,可以遵循的一些技术规范。
二、编程安全规范
-
【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。
说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容、修改他人的订单信息等等;
-
【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
说明:中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露。
-
【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
反例:某系统签名大量被恶意修改,即是因为对于危险字符 # --没有进行转义,导致数据库更新时,where后边的信息被注释掉,对全库进行更新。
-
【强制】用户请求传入的任何参数必须做有效性验证。
说明:忽略参数校验可能导致:
-
page size 过大导致内存溢出
-
恶意 order by 导致数据库慢查询
-
缓存击穿
-
SSRF
-
任意重定向
-
SQL 注入,Shell 注入,反序列化注入
-
正则输入源串拒绝服务 ReDoS
-
Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。
-
【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。
-
【强制】表单、AJAX 提交必须执行 CSRF 安全验证。
说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。
-
【强制】URL 外部重定向传入的目标地址必须执行白名单过滤。
-
【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机制,如数量限制、疲劳度控制、验证码校验,避免被滥刷而导致资损。
说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其它用户,并造成短信平台资源浪费。
-
【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。
-
打印的日志时,不允许输出机密、敏感信息,如用户联系方式、身份证号码、token等;
三、总结
以上介绍了JAVA后端开发,关于编程安全方面,可以遵循的一些技术规范。
编程安全无小事,若出现安全问题,被黑客恶意攻击,轻则出现服务器故障。严重的话,会给公司带来重大的经济损失。所以,我们在编程时,一定要重视编程安全问题,有安全方面的意识,不要仅考虑业务功能开发实现。
附本文参考资料:
- 阿里云官方知乎:https://www.zhihu.com/org/a-li-yun-97-77
- 阿里云开发者官方社区:https://developer.aliyun.com/
- 阿里开发者官方CSDN社区:https://blog.csdn.net/alitech2017?type=blog
- 阿里云云栖号CSDN:https://blog.csdn.net/yunqiinsight/category_10231626.html
- 阿里巴巴技术团队发布的《JAVA开发手册》泰山版
- 阿里云开发者官方微信公众号
如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)
-
-