JAVA编码规范:安全规约、mysql数据库_java后端的sql编码规范(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

安全规约

1、【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。

说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容、修改他人的订单。

前端后端最好都校验。修改信息的接口,假如直接暴露接口是不安全的,接口校验调用者是不是被修改对象的拥有者。后台的敏感接口。(权限、角色)

2、【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。

说明:中国大陆个人手机号码显示为:1370969,隐藏中间4位,防止隐私泄露。

1.view层的展示一定要加密

2.数据库的数据明文(未加密)

3、【强制】用户输入的 SQL参数严格使用参数绑定或者 METADATA字段值限定,防止 SQL注入,禁止字符串拼接 SQL访问数据库。

Java的技术栈里,mybatis框架有防止依赖注入的措施。#代表先编译后引用,美元符号代表直接拼接sql。开发人员千万不要做字符串连接SQL。(少用或不用$)

4、【强制】用户请求传入的任何参数必须做有效性验证。

说明:忽略参数校验可能导致:

  1. page size 过大导致内存溢出
  2. 恶意 order by 导致数据库慢查询
  3. 任意重定向
  4. SQL注入
  5. 反序列化注入
  6. 正则输入源串拒绝服务 ReDoS

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

的结果。ReDOS(Regular expression Denial of Service)正则表达式拒绝服务攻击。实际上开发人员使用了正则表达式来对用户输入的数据进行有效性校验,当编

写校验的正则表达式存在缺陷或者不严谨时,攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。

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

系统的出口要堵住特殊字符,出口一般指的是web界面。同时也要保证系统的入口不要进入特殊字符,入口可能是web界面,也可能是开发的接口。

6、【强制】表单、AJAX 提交必须执行CSRF安全验证。

说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访

问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。

7、【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机制,如数量限制、疲劳度控制、验证码校验,
免被滥刷而导致资损。

说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其它用户,并造成短信平台资源浪费。

mysql数据库

(一)建表规约

1、【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是 unsignedtinyint(1表示是,0 表示否)

说明:任何字段如果为非负数,必须是 unsigned.

注意:POJ0 类中的任何布尔类型的变量,都不要加is前缀,所以,需要在设置从 is xxx到 Xxx 的映

射关系。数据库表示是与否的值,使用 tinyint 类型,坚持is xxx 的命名方式是为了明确其取值含义与取值范围。

2、【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无
法进行预发布,所以字段名称需要慎重考虑。

说明:MySQL在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。正

例:aliyun_admin ,rdc_config ,level3_name

反例:AliyunAdmin ,rdcConfig ,level_3_name

在数据库里命名规约多个单词之间每个词之间用下划线分隔,所有的单词建议全小写但是某一些数据库有自己的特性,比如MySQL数据在windows里是大小写不敏

感的,在linux是大小写敏感的

在oracle数据库里比较特殊,如果表名字段名用双引号引起来一定是大小写敏感的,不加双引号是大小写不敏感的。所以小写和下划线分隔这样更好一点“aliyun_admin”

3、【强制】表名不使用复数名词。

说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于 DO 类名也是单数形式,符合表达习惯。

因为表作为数据载体,里面复数是多条记录,而每一条记录代表一条完整数据。不建议表名复数。

4、【强制】禁用保留字,如 desc、range、match、delayed等,请参考 MySQL 官方保留字。
5、(强制】主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名_

说明:pk_即primary key;uk 即 unique key;idx_即index 的简称。

6、【强制】小数类型为 decimal,禁止使用 float 和 double。

说明:在存储的时候,float 和 double 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据

拆成整数和小数并分开存储。

7、【强制】如果存储的字符串长度几乎相等,使用 char定长字符串类型
8、【强制】varchar是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张
表,用主键来对应,避免影响其它字段索引效率。
9、【强制】表必备三字段:id,create_time,update_time.

说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为1。create_time,update_time的类型均为 datetime 类型。

数据的创建时间和数据的修改时间,分别代表这条数据什么时间创建什么时间修改;id是作为数据库一定遵守设计范式第一范式就是必须有主键代表数据的唯一值。

10、【推荐】表的命名最好是遵循“业务名称_表的作用”

正例:alipay_task/force_project/trade_config

11、【推荐】库名与应用名称尽量一致。
12、【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。
13、【推荐】字段允许适当几余,以提尚直间能,但必须考虑数据一致。

冗余字段应遵循

1)不是频繁修改的字段。

2)不是 varchar 超长字段,更不能是 text 字段。

3)不是唯一索引的字段。

正例:商品类目名称使用频率高,字段长度短,名称基本一不变,可在相关联的表中冗余存储类目名称,避免关联查询。

14、【推荐】单表行数超过 500万行或者单表容量超过 2GB,才推荐进行分库分表说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建
表时就分库分表。
15、【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

正例:如下表,其中无符号值可以避免误存负数,且扩大了表示范围。

(二)索引规约

1、【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引

说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外即使在应用层做了非常完善的校验控制,只要没有唯一索引,根

据墨菲定律,必然有脏数据产生。

2、【强制】超过三个表禁止join。需要join 的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

说明:即使双表join 也要注意表索引、SOL性能。

3、【强制)在 varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据 实际文本区分度决定索引长度即可。

说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高达 90%以上,可以使用 count(distinct left(列名,索引长

度))/count(*)的区分度来确定。

4、【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决

说明:索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

5、【推荐】如果有 order by的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出
现 file_sort 的情况,影响查询性能。

正例:where a=? and b=? order by c;索引:a_b_c

反例:索引如果存在范围查询,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b;索引a_b无法排序。

6、【推荐】利用覆盖索引来进行查询操作,避免回表。

说明:如果一本书需要知道第 11 章是什么标题,会翻开第 11 章对应的那一页吗?目录浏览一下就好,这个目录就是起到覆盖索引的作用。

正例:能够建立索引的种类分为主键索引、唯一索引、普通索引三种,而覆盖索引只是一种查询的一种效果,用 explain 的结果,extra 列会出现:using index。

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-csU1gN5E-1713138665478)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值