如何在Java开发中,更加安全的编码?这是一个问题,2024年最新深度集成

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

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

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

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

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

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

正文

(3) 及时更新升级第三方组件:

比如Struts、Spring、ImageMagick等。

日志伪造防范

严重性低,可能性高。

(1) 不要log用户可控的信息;

(2) 输入参数校验(推荐白名单):

// 处理回车、换行符

Pattern p = Pattern.compile(“%0a|%0d0a|\n|\r\n”);

Matcher m = p.matcher(data);

dest = m.replaceAll(“”);

(3) 使用 Log4j2。

XML 外部实体攻击

严重性中,可能性中。

(1) 关闭内联 DTD 解析,使用白名单来控制允许使用的协议;

(2) 禁用外部实体:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setExpandEntityReferences(false);

(3) 过滤用户提交的 XML 数据:

比如 !DOCTYPE、<!ENTITY、SYSTEM、PUBLIC 等。

XML 注入防范

严重性中,可能性低。

(1) 教研用户输入(推荐白名单):

OutputFormat format = OutputFormat.createPrettyPrint();

(2) 使用安全的 XML 库(比如 dom4j)。

URL 重定向防范

严重性中,可能性低。

(1) 设置严格白名单及网络边界:

String url = request.getParameter(“url”);

String host = getHostFromUrl(url);

if(!validateHost(host)) {

return;

}

(2) 加入有效性验证的 Token;

(3) referer 适用于检测监控 URL 重定向、CSRF 等,多数场景下也可用作防范措施。

异常处理

====

编码原则:不要泄露详细异常信息。

敏感信息泄露防范

严重性低,可能性中。

屏蔽敏感信息示例:

catch(IOException e) {

System.out.println(“Invalid file”);

// System.out.println(“Error code: 0001”);

return;

}

保持对象一致性

严重性中,可能性低。

(1) 重排逻辑,使得产生异常的代码在改变对象状态的代码之前执行;

catch(Exception e) {

// revert

money -= PADDING;

return -1;

}

(2) 在出现异常导致操作失败的情况下,使用事务回滚机制;

(3) 在对象的临时拷贝上执行操作,成功后再提交给正式的对象;

(4) 回避修改对象的需求,尽量不去修改对象。

I/O 操作

=======

编码规则:可写的文件不可执行,可执行的文件不可写。

资源释放

严重性低,可能性高。

Java 垃圾回收器回自动释放内存资源,非内存资源需要开发人员手动释放,比如 DataBase,Files,Sockets,Streams,Synchronization 等资源的释放。

try {

Connection conn = getConnection();

Statement statement = conn.createStatement();

ResultSet resultSet = statement.executeQuery(sqlQuery);

processResults(resultSet);

} catch(SQLException e) {

// forward to handler

} finally {

if (null != conn) {

conn.close();

}

}

清除临时文件

严重性中,可能性中。

(1) 自动清除:

File tempFile = Files.createTempFile(“tempname”, “.tmp”);

try {

BufferedWriter writer = Files.newBufferedWriter(tempFile.toPath(),

StandardCharsets.UTF_8, StandardOpenOption.DELETE_ON_CLOSE)

// operate the file

writer.newLine();

} catch (IOException e) {

e.printStackTrace();

}

(2) 手动清除。

避免将 bufer 暴露给不可信代码

严重性中,可能性中。

wrap、duplicate 创建的 buffer 应该以只读或拷贝的方式返回:

Charbuffer buffer;

public Duplicator() {

buffer = CharBuffer.allocate(10);

}

/** 获取只读的 Buffer */

public CharBuffer getBufferCopy() {

return buffer.asReadOnlyBuffer();

}

任意文件下载/路径遍历防范

严重性中,可能性高。

(1) 校验用户可控的参数(推荐白名单);

(2) 文件路径保存到数据库,让用户提交文件对应的 ID 去下载文件:

<%

String filePath = getFilePath(request.getParameter(“id”));

download(filePath);

%>

(3) 判断目录和文件名:

if(!“/somedir/”.equals(filePath) || !“jpg”.equals(fileType)) {

return -1;

}

(4) 下载文件前做权限判断。

补充:禁止将敏感文件(如日志文件、配置文件、数据库文件等)存放在 web 内容目录下。

非法文件上传防范

严重性高,可能性中。

在服务器端用白名单方式过滤文件类型,使用随机数改写文件名和文件路径。

if(!ESAPI.validator().isValidFileName(

“upload”, filename, allowedExtensions, false)) {

throw new ValidationUploadException(“upload error”);

}

补充:如果使用第三方编辑器,请及时更新版本。

序列化/反序列化操作

==========

编码原则:不信任原则。

敏感数据禁止序列化

严重性高,可能性低。

使用 transient、serialPersistentFields 标注敏感数据:

private static final ObjectStreamField[] serialPersistentFields = {

new ObjectStreamField(“name”, String.class),

new ObjectStreamField(“age”, Integer.TYPE)

}

当然,正确加密的敏感数据可以序列化。

正确使用安全管理器

严重性高,可能性低。

如果一个类的构造方法中含有各种安全管理器的检查,在反序列化时也要进行检查:

private void writeObject(ObjectOutputStream out) throws IOException {

performSecurityManagerChek();

out.writeObject(xxx);

}

补充:第三方组件造成的反序列化漏洞可通过更新升级组件解决;

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

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

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

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

中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

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

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

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

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值