2024年网络安全最新如何在Java开发中,更加安全的编码?这是一个标题 ...

种地  金牌会员 | 2024-8-27 12:09:09 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 554|帖子 554|积分 1662

// 处理回车、换行符
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);
}
增补:第三方组件造成的反序列化漏洞可通过更新升级组件解决;
禁止 JVM 实验外部下令,可减小序列化漏洞造成的危害。
运行情况
====
   编码原则:攻击面最小化原则。
  不要禁用字节码验证

严重性中,可能性低。
启用 Java 字节码验证:Java -Xverify:all ApplicationName
不要长途调试/监控生产情况的应用

严重性高,可能性低。
(1) 生产情况中安装默认的安全管理器,而且不要使用 -agentlib,-Xrunjdwp 和 -Xdebug 下令行参数:
${JAVA_HOME}/bin/java -Djava.security.manager ApplicationName
(2) iptables 中关闭相应 jdwp 对外访问的端口。
生产应用只能有一个入口

严重性中,可能性中。
移除项目中多余的 main 方法。
业务逻辑
====
   编码原则:安全计划 API。
  用户体系

过程如下:
(1) identification <-- 宣称用户身份(判定提供唯一性)||–> (2) authentication <-- 验证用户身份(验证提供有效性)||–> (3) authorization <-- 授权访问相关资源(授权提供访问控制)||–> RESOURCE||–> (4) accountability <-- 日记追溯
(1) 身份验证:
严重性高,可能性中。
多因素认证;暴力破解防范:验证码、短信验证码、密码复杂度校验、锁定账号、锁定终端等;敏感数据保护:存储、传输、展示(API 接口、HTML 页面掩码);禁止本地验证:重要操作均在服务器端举行验证。
(2) 访问控制:
严重性高,可能性中。
从 Session 中获取身份信息;禁用默认账号、匿名账号,限制超级账号的使用;重要操作做到职责分离;用户、脚色、资源、权限做好相互校验;权限验证要在服务器端举行;数据传输阶段做好加密防篡改。
增补:oauth 授权时授权方和应用方都要做好安全控制。
如何自学黑客&网络安全

黑客零底子入门学习路线&规划

低级黑客
1、网络安全理论知识(2天)
①相识行业相关配景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试底子(一周)
①渗透测试的流程、分类、尺度
②信息收集技术:自动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作体系底子(一周)
①Windows体系常见功能和下令
②Kali Linux体系常见功能和下令
③操作体系安全(体系入侵排查/体系加固底子)
4、计算机网络底子(一周)
①计算机网络底子、协议和架构
②网络通信原理、OSI模子、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:自动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库底子操作(2天)
①数据库底子
②SQL语言底子
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,假如学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;假如等保模块学的好,还可以从事等保工程师。薪资区间6k-15k
到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?
假如你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包品评区留言即可领取!
7、脚本编程(低级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在现实的渗透测试过程中,面对复杂多变的网络情况,当常用工具不能满意现实需求的时间,每每必要对现有工具举行扩展,大概编写符合我们要求的工具、自动化脚本,这个时间就必要具备一定的编程能力。在分秒必争的CTF比赛中,想要高效地使用自制的脚本工具来实现各种目的,更是必要拥有编程能力.
假如你零底子入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库举行编程学习;搭建开发情况和选择IDE,PHP情况推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并誊写一个简单的博客体系;熟悉MVC架构,并试着学习一个PHP框架大概Python框架 (可选);·相识Bootstrap的结构大概CSS。
8、超级黑客
这部门内容对零底子的同砚来说还比较遥远,就不睁开细说了,附上学习路线。

网络安全工程师企业级学习路线


如图片过大被平台压缩导致看不清的话,品评区点赞和品评区留言获取吧。我都会回复的
视频配套资料&国表里网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,而且已经帮大家分好类了。

一些笔者自己买的、其他平台白嫖不到的视频教程。

网上学习资料一大堆,但假如学到的知识不成体系,碰到标题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提拔。
必要这份体系化资料的朋友,可以点击这里获取
一个人可以走的很快,但一群人才气走的更远!岂论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都欢迎加入我们的的圈子(技术交换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习发展!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表