瑞_Java开发手册_(四)安全规约

这篇具有很好参考价值的文章主要介绍了瑞_Java开发手册_(四)安全规约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🙊前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!

本系列第一篇链接:(一)编程规约
本系列第二篇链接:(二)异常日志
本系列第三篇链接:(三)单元测试
本系列第四篇链接:(四)安全规约
本系列第五篇链接:(五)MySQL数据库
本系列第六篇链接:(六)工程结构
本系列第七篇链接:(七)设计规约

瑞_Java开发手册_(四)安全规约,Java开发手册,java,代码规范

安全规约的意义

  安全规约主要是为了保障代码的安全性,从而减少系统被攻击的风险。安全规约包括但不限于防止SQL注入、XSS攻击、CSRF攻击、文件上传漏洞、文件包含漏洞等方面的安全问题。制定这些规则的目的并不是为了约束和禁锢开发者的创造力,而是为了帮助大家能够在正确的道路上,尽可能的避免踩坑和跑偏。规则可能会对代码实现造成影响,但是制定规则的主要目标是为了让大多数程序员小伙伴可以得到更多的好处。如果在团队实际运作中认为某个规则无法遵循或有更好的做法,希望大家可以共同改进该规范。

  安全规约的意义在于:

  • 防止安全漏洞:安全规约提供了一系列的安全实践和建议,帮助开发者避免常见的安全漏洞,如SQL注入、跨站脚本攻击(XSS)等。
  • 提高代码质量:遵循安全规约可以促使开发者编写更加健壮、可靠的代码。通过避免不安全的代码实践,可以提高代码的整体质量,减少潜在的错误和问题。
  • 增强安全性意识:安全规约强调了安全在软件开发中的重要性,促使开发者更加关注安全性问题。通过学习和遵守安全规约,可以提高开发者的安全意识,使安全性成为整个开发团队共同关注的问题。
  • 统一安全标准:安全规约可以作为统一的安全标准,确保所有开发人员遵循相同的最佳实践和准则。这有助于在整个项目中保持一致的安全水平,并减少安全相关的风险。
  • 减少维护成本:遵循安全规约可以降低软件维护成本。安全的代码更易于维护、调试和使用,减少了对安全问题的修复和加固的成本。
  • 合规性:对于一些特定行业或应用场景,可能需要遵循特定的安全标准和法规。遵循安全规约可以帮助开发者确保其代码符合这些标准和法规要求,避免因不合规导致的法律风险和责任。

安全规约

  1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。
    说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。

瑞:水平权限校验是指对用户个人页面或功能的访问权限进行校验,以确保只有经过授权的用户才能访问或修改特定的数据。这种校验通常用于防止未授权的用户随意访问、修改或删除他人的数据,以保护数据的隐私和安全性

  1. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
    说明:中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露。

瑞:手机号脱敏代码如下(正则表达式参考):

    public static String maskPhoneNumber(String input) {
        // 匹配手机号的正则表达式
        String phonePattern = "(\\d{3})\\d{4}(\\d{4})";
        // 数据脱敏,将匹配到的手机号中间四位替换为星号
        return input.replaceAll(phonePattern, "$1****$2");
    }
  1. 【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
    反例:某系统签名大量被恶意修改,即是因为对于危险字符 # --没有进行转义,导致数据库更新时,where后边的信息被注释掉,对全库进行更新。

瑞:❗️本条为神坑 ❗️ 有小可爱在使用 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 注入。

  1. 【强制】用户请求传入的任何参数必须做有效性验证。
    说明:忽略参数校验可能导致:
    • page size 过大导致内存溢出
    • 恶意 order by 导致数据库慢查询
    • 缓存击穿
    • SSRF
    • 任意重定向
    • SQL 注入,Shell 注入,反序列化注入
    • 正则输入源串拒绝服务 ReDoS

      Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。

瑞:本条建议配合测试使用

  1. 【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。

瑞:为了防止跨站脚本攻击(XSS)

  1. 【强制】表单、AJAX 提交必须执行 CSRF 安全验证。
    说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。

  2. 【强制】URL 外部重定向传入的目标地址必须执行白名单过滤。

瑞:如果服务端未对传入的跳转url变量进行检查和控制,恶意攻击者可以构造一个恶意地址,诱导用户跳转到恶意网站。由于跳转是从用户信任的站点进行的,用户很可能会不加怀疑地信任该跳转,从而受到钓鱼攻击或其他网络欺诈。所以,为了开发人员的清白,懂的都懂💦

  1. 【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机制,如数量限制、疲劳度控制、验证码校验,避免被滥刷而导致资损。
    说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其它用户,并造成短信平台资源浪费。

瑞:尤其是登录密码校验,如果不设置限制和频率,那么密码就容易被暴力破解

  1. 【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。

瑞:博主认为本条不应该是推荐,而是【强制】,同第7条,懂的都懂




本文是博主的粗浅理解,可能存在一些错误或不完善之处,如有遗漏或错误欢迎各位补充,谢谢

  如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~文章来源地址https://www.toymoban.com/news/detail-795909.html


到了这里,关于瑞_Java开发手册_(四)安全规约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 瑞_Java开发手册_(一)编程规约

    🙊前言:本文章为瑞_系列专栏之《Java开发手册》的编程规约篇,本篇章主要介绍命名风格、常量定义、代码格式、OOP规约、日期时间、集合处理、并发处理、控制语句、注释规约以及其它常见的编程规约。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本

    2024年01月21日
    浏览(30)
  • 阿里开发手册规范(JAVA)

    目录 一、编程规约  (一) 命名规范 (二) 常量定义 (三) 代码格式  (四) OOP规约 (五) 日期时间 (六) 集合处理  (七) 并发处理 (八) 控制语句 (九) 注释规约 (十) 前后端规约 二、异常日志  (一) 错误码 (二) 异常处理 (三) 日志规约  三、单元测试  四、安全规约 五、MySQL数据库 

    2024年02月01日
    浏览(31)
  • 阿里巴巴Java开发 单元测试和安全规约

    目录 前言 1.单元测试 2.安全规约 单元测试和安全规约依次分为【 重要 】、【 建议 】、【 参考 】,整理单元测试和安全规约为了更好处理代码中bug,使得代码更加安全。 1.【 重要 】好的单元测试必须遵守 AIR 原则。          说明 :单元测试在线上运行时,感觉像空气

    2024年04月10日
    浏览(45)
  • 开发手册|Java后端开发规范重点条目整理

    Ps:部分熟知的开发规范未收录在本文中!暂无排版格式,等待后续添加…… 1.1 命名风格 代码中的命名严禁使用拼音与英文混合的方式 alibaba / taobao / youku / hangzhou 等国际通用的名称可视同英文 类名使用大驼峰的形式命名,例如 UpperCameCase 方法、参数与变量使用小驼峰的形式

    2024年02月14日
    浏览(32)
  • 阿里巴巴_java开发规范手册详解

    反例: _name, $name, __name 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。 正例:renminbi / alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。 反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3 正例:

    2024年02月06日
    浏览(35)
  • 码出高效:Java开发手册笔记(线程安全)

        并发与并行的目标都是尽可能快地执行完所有任务。以医生坐诊为例,某个科室有两个专家同时出诊,这就是两个并行任务,其中一个医生,时而问诊,时而查看化验单,然后继续问诊,突然又中断去处理病人的咨询,这就是并发。在并发环境下,由于程序的封闭性全

    2024年02月08日
    浏览(29)
  • Java编程规范(代码规范)--精选

    说明 本文介绍精选的Java编程规范(代码规范)。遵守这些规范,代码的bug数将会大幅减少,代码可维护性、可读性、扩展性会大幅上升。(本文持续更新) 为什么要有编程规范? 编程规范有如下作用: 提高代码可读性、维护性、扩展性 提高开发速度、减少bug 有助于留住人

    2024年02月05日
    浏览(27)
  • 【开发规范系列】(二):Java后台开发规范

    https://blog.zysicyj.top/ 提到Java开发规范,那么大家能想到的基本就是 阿里巴巴Java开发手册 ,这个手册的内容很丰富,但是呢篇幅太长,很多人都记不住,那么怎么办呢?好在阿里巴巴提供了代码扫描插件,方便我们开发时发现问题并及时修改。 参考这篇文章:【插件】Java开

    2024年02月10日
    浏览(28)
  • Java阿里巴巴代码规范

    想学习架构师构建流程请跳转:Java架构师系统架构设计 我们介绍了让代码规范的方案,下面我们就来说一下阿里的代码规范文档 1.1.1 反例 这种操作很容易产生难以排查的NPE异常 1.1.2 正例 入参以及出参,和参数传递类型是一致的 SimpleDateFormat 是线程不安全的类,一般不要定

    2024年02月10日
    浏览(54)
  • 【Python开发手册】深入剖析Google Python开发规范:规范Python注释写作

    💖 作者简介:大家好,我是Zeeland,全栈领域优质创作者。 📝 CSDN主页:Zeeland🔥 📣 我的博客:Zeeland 📚 Github主页: Undertone0809 (Zeeland) (github.com) 🎉 支持我:点赞👍+收藏⭐️+留言📝 📣 系列专栏:Python系列专栏 🍁 💬介绍:The mixture of software dev+Iot+ml+anything🔥 本文节选

    2023年04月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包