前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!
本系列第一篇链接:(一)编程规约
本系列第二篇链接:(二)异常日志
本系列第三篇链接:(三)单元测试
安全规约主要是为了保障代码的安全性,从而减少系统被攻击的风险。安全规约包括但不限于防止SQL注入、XSS攻击、CSRF攻击、文件上传漏洞、文件包含漏洞等方面的安全问题。制定这些规则的目的并不是为了约束和禁锢开发者的创造力,而是为了帮助大家能够在正确的道路上,尽可能的避免踩坑和跑偏。规则可能会对代码实现造成影响,但是制定规则的主要目标是为了让大多数程序员小伙伴可以得到更多的好处。如果在团队实际运作中认为某个规则无法遵循或有更好的做法,希望大家可以共同改进该规范。
安全规约的意义在于:
瑞:水平权限校验是指对用户个人页面或功能的访问权限进行校验,以确保只有经过授权的用户才能访问或修改特定的数据。这种校验通常用于防止未授权的用户随意访问、修改或删除他人的数据,以保护数据的隐私和安全性
瑞:手机号脱敏代码如下(正则表达式参考):
public static String maskPhoneNumber(String input) {
// 匹配手机号的正则表达式
String phonePattern = "(\\d{3})\\d{4}(\\d{4})";
// 数据脱敏,将匹配到的手机号中间四位替换为星号
return input.replaceAll(phonePattern, "$1****$2");
}
瑞:❗️本条为神坑 ❗️ 有小可爱在使用 JDBC 编写SQL时为了方便调试❌选择用如String.format的方式拼接SQL语句❌,拼接出的SQL语句如下所示,假设现在用户使用
Ray ' --
(注意要空格,SQL注入)为需要修改的用户名,直接导致where语句之后的信息全部被注释,导致了全表更新❗️ ❗️ ❗️
UPDATE `user` SET nick_name = 'Ray '-- ’ WHERE is_deleted = 0 and id = 1
如果是使用MyBatis等框架,请使用:#{},#param# 。不要使用${} 此种方式容易出现 SQL 注入。
瑞:本条建议配合测试使用
瑞:为了防止跨站脚本攻击(XSS)
【强制】表单、AJAX 提交必须执行 CSRF 安全验证。
说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。
【强制】URL 外部重定向传入的目标地址必须执行白名单过滤。
瑞:如果服务端未对传入的跳转url变量进行检查和控制,恶意攻击者可以构造一个恶意地址,诱导用户跳转到恶意网站。由于跳转是从用户信任的站点进行的,用户很可能会不加怀疑地信任该跳转,从而受到钓鱼攻击或其他网络欺诈。所以,为了开发人员的清白,懂的都懂
瑞:尤其是登录密码校验,如果不设置限制和频率,那么密码就容易被暴力破解
瑞:博主认为本条不应该是推荐,而是【强制】,同第7条,懂的都懂
如果觉得这篇文章对您有所帮助的话,请动动小手点波关注,你的点赞收藏⭐️转发评论都是对博主最好的支持~