Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaEE中遗漏的10个最重要的安全控制

JavaEE中遗漏的10个最重要的安全控制

作者头像
用户1289394
发布于 2018-02-27 06:37:47
发布于 2018-02-27 06:37:47
8700
举报
文章被收录于专栏:Java学习网Java学习网

JavaEE中遗漏的10个最重要的安全控制

JavaEE有一些超赞的内置安全机制,但它们远远不能覆盖应用程序要面临的所有威胁。很多常见攻击,例如跨站点脚本攻击(XSS)、SQL注入、跨站点伪造请求(CSRF),以及XML外部实体(XXE)丝毫没有涵盖。你可以阻止web应用程序和web服务暴露于这些攻击,但这需要一定量的工作和测试。幸运的是,Open Web Application Security Project(OWASP)公布了“10大最关键的web应用程序安全风险”的报告。

让我们来看看这些关键的风险如何应用于JavaEE的web应用程序和web服务: 1.注入 注入发生在开发人员获取不可信的信息,例如request.getParameter(),request.getCookie(),或request.getHeader(),并在命令接口中使用它的任何时候。例如,SQL注入在你连接不可信的数据到常规SQL查询,如“SELECT * FROM users WHERE username=‘“ + request.getParameter(“user”) + “‘ AND password=‘“ + request.getParameter(“pass”) = “‘“时发生。开发人员应该使用PreparedStatement来防止攻击者改变查询的含义和接管数据库主机。还有许多其他类型的注入,如Command注入、LDAP注入以及Expression Language (EL) 注入,所有这些都极度危险,因此在发送数据到这些解释器的时候要格外小心。 2.损坏的验证和会话管理 JavaEE支持身份验证和会话管理,但这里有很多容易出错的地方。你必须确保所有经过验证流量都通过SSL,没有例外。如果你曾经暴露JSESSIONID,那么它就可被用来在你不知情的情况下劫持用户会话。你应该旋转JSESSIONID,在用户进行身份验证以防止会话固定攻击(Session Fixation attack)的时候。你应该避免使用response.encodeURL(),因为它会添加用户的JSESSIONID到URL,使得更容易被披露或被盗。 3.跨站点脚本攻击(XSS) XSS发生在当JavaEE开发人员从HTTP请求获取不可信的信息,并把它放到HTTP响应中,而没有适当的上下文输出编码的时候。攻击者可以利用这个行为将他们的脚本注入网站,然后在这个网站上劫持会话和窃取数据。为了防止这些攻击,开发人员需要执行敏感的上下文输出编码。如果你把数据转换成HTML,使用&#xx;格式。请务必括号HTML属性,因为有很多不同字符而不带括号的属性会被终止。如果你把不可信的数据放到JavaScript,URL或CSS中,那么对于每一个你都应该使用相应的转义方法。并且在和嵌套上下文,如一个用Javascript写的在HTML属性中的URL打交道时,要非常小心。你可能会想要编码库,例如OWASP ESAPI的帮助。 4.不安全的直接对象引用 任何时候应用程序暴露了一个内部标识符,例如数据库密钥,文件名,或hashmap索引,攻击者就可以尝试操纵这些标识符来访问未经授权的数据。例如,如果你将来自于HTTP请求的不可信的数据传递到Java文件构造器,攻击者就可以利用“../”或空字节攻击来欺骗你的验证。你应该考虑对你的数据使用间接引用,以防止这种类型的攻击。ESAPI库支持促进这种间接引用的ReferenceMaps。 5.错误的安全配置 现代的JavaEE应用程序和框架,例如Struts和Spring中有着大量的安全设置。确定你已经浏览过这些安全设置,并按你想要的那样设置。例如,小心<security-constraint>中的<http-method>标签。这表明安全约束仅适用于列出的方法,允许攻击者使用其他HTTP方法,如HEAD和PUT,来绕过整个安全约束。也许你应该删除web.xml中的<http-method>标签。 6.敏感数据暴露 Java有大量的加密库,但它们不容易正确使用。你应该找到一个建立在JCE基础上的库,并且它能够方便、安全地提供有用的加密方法。比如Jasypt和ESAPI就是这样的库。你应该使用强大的算法,如AES用于加密,以及SHA256用于hashes。但是要小心密码hashes,因为它们可以利用Rainbow Table被解密,所以要使用自适应算法,如bcrypt或PBKDF2。 7.缺少功能级访问控制 JavaEE支持声明式和程序式的访问控制,但很多应用程序仍然会选择创造它们自己的方案。像Spring框架也有基于注释的访问控制基元。最重要的事情是要确保每一个暴露的端口都要有适当的访问控制检查,包括web服务。不要以为客户端可以控制任何东西,因为攻击者会直接访问你的端点。 8.跨站点伪造请求(CSRF) 每个改变状态的端点需要验证请求有没有被伪造。开发人员应该在每个用户的会话中放入随机令牌,然后当请求到达的时候验证它。否则,攻击者就可以通过链接到未受保护的应用程序的恶意IMG,SCRIPT, FRAME或FORM标签等创建“攻击”页面。当受害者浏览这种页面时,浏览器会生成一个“伪造”的HTTP请求到URL在标签中被指定的任何内容,并且自动包括受害人的认证信息。 9.使用带有已知漏洞的组件 现代的JavaEE应用程序有数百个库。依赖性解析工具,如Maven,导致了这个数字在过去五年时间里出现爆炸式增长。许多广泛使用的Java库都有一些已知的漏洞,会让web应用程序被完全颠覆。解决的办法是及时更新库。不要只运行单一扫描,因为新的漏洞每天都在发布。 10.未经验证的转址和转送 任何时候你的应用程序使用不可信的数据,例如request.getParameter()或request.getCookie(),在调用response.sendRedirect()时,攻击者可以强制受害者的浏览器转到一个不受信任的网站,目的在于安装恶意软件。forward也存在着类似的问题,不同之处在于攻击者可以转送他们自己到未经授权的功能,如管理页面。一定要仔细验证转址和转送目标。 你应该持续留意这些问题。新的攻击和漏洞总是在被发现。理想情况下,你可以集成安全检查到现有的构建、测试和部署过程。 要在应用程序中检查这些问题,可以尝试免费的Contrast for Eclipse插件 。这不是一个简单的静态分析工具。相反,C4E利用Java仪表化API,来监视应用程序中与安全相关的一切。 C4E甚至能实时地做到完整的数据流分析,因此它可以跟踪来自于请求的数据,通过一个复杂的应用程序。例如,假设你的代码获取了一个参数值,用base64解码它,再存储于map中,把map放到数据bean中,再将bean存储到一个会话属性中,在JSP中获取bean的值,并使用EL将这个值插入到网页。Contrast for Eclipse可以跟踪这些数据并报告XSS漏洞。哪怕你正在使用的是复杂的框架和库。没有其他工具能在速度,精度和易用性方面与之媲美。 你可以在Eclipse Marketplace找到Contrast for Eclipse。然后,只需转到服务器选项卡“Start with Contrast”——剩下的就交给它办吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【软件开发规范四】《应用系统安全编码规范》
为落实《信息安全策略》的要求,有效加强应用系统安全管理,提升应用系统安全编码能力,指导开发团队有效进行应用系统安全编码,特制定本规范。
再见孙悟空_
2023/09/19
1.6K0
安全测试 —— 你了解WEB安全测试吗?
  之前在知乎上回答了一个朋友的提问,是关于安全测试相关面试题的,在回答之余让我也不禁想起了自己还在做软测执行的日子。趁着兴起,和团队里的安全测试小伙伴交流了一下,写下了这篇文章,也希望能帮助到更多正在安全测试道路上前行的小伙伴。
Austin_zhai
2023/10/18
9260
安全测试 —— 你了解WEB安全测试吗?
OWASP Top 10关键点记录
注入攻击漏洞,例如SQL,OS以及LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。
信安之路
2018/08/08
1.3K0
OWASP介绍以及常见漏洞名称解释
[TOC] 0x00 快速入门 OWASP是什么? 描述: Open Web Application Security Project (OWASP)开源Web应用安全项目(OWASP)是一个在线开放
全栈工程师修炼指南
2022/09/29
3.8K0
OWASP介绍以及常见漏洞名称解释
Java安全编码实践总结
Java作为企业主流开发语言已流行多年,各种java安全编码规范也层出不穷,本文将从实践角度出发,整合工作中遇到过的多种常见安全漏洞,给出不同场景下的安全编码方式。
FB客服
2020/07/15
1.7K0
Java安全编码实践总结
Owasp top10 小结[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 Owasp top10 1.SQL注入 原理:web应用程序对用户输入的数据合法性没有过滤或者是判断,前端传入的参数是攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过恶意的sql语句来实现对数据库的任意操作。 2.失效的身份认证和会话管理 原理:在开发web应用程序时,开发人员往往只关注Web应用程序所需的功能,所以常常会建立自定义的认证和会话方案。但是要正确的实现这些方案却是很难的。结果就在退出,密码管理,超时,密码找回,账户更新等方面存在漏洞。 危
全栈程序员站长
2022/09/02
1.3K0
原 web安全、XSS、CSRF、注入攻击
作者:汪娇娇 时间:2017年8月15日 当时也是看了一本书《白帽子讲web安全》,简单的摘录然后做了个技术分享,文章不是很详细,建议大家结合着这本书看哈。 web安全 一、世界观安全 1、黑帽子、白
jojo
2018/05/03
2.1K0
原                                                                                web安全、XSS、CSRF、注入攻击
预防XSS,这几招管用!
大家应该都听过 XSS (Cross-site scripting) 攻击问题,或多或少会有一些了解,但貌似很少有人将这个问题放在心上。一部分人是存有侥幸心理:“谁会无聊攻击我们的网站呢?”;另一部分人可能是工作职责所在,很少触碰这个话题。希望大家看过这篇文章之后能将问题重视起来,并有自己的解决方案, 目前XSS攻击问题依旧很严峻:
用户4172423
2019/09/04
6710
预防XSS,这几招管用!
一篇文章掌握常见的网站攻击方式
最近兼职部门的安全接口人,时不时收到信息安全部发过来的漏洞,有些漏洞看得一头雾水(没文化真可怕)。赶紧普及一下常见的安全问题。
普通程序员
2019/10/23
7350
一篇文章掌握常见的网站攻击方式
2021 OWASP TOP 10
2021年版OWASP Top 10的编制比以往更受数据驱动,但又并非盲目地受数据驱动,我们从公开收集的数据中选定了8个类别,之后又从Top 10社区调查结果中选择了2个高级别的类别,组成了10个类别。我们这样做是为了一个根本原因——通过查看收集到的数据来回顾过去。因为应用安全研究人员寻找新的漏洞和测试它们的新方法需要时间,将这些测试集成到工具和流程中也需要时间,当我们能够可靠地大规模测试弱点时,可能已经过去了很长时间,为了平衡这种观点,我们使用社区调查来向一线应用程序安全和开发专家征求意见,询问他们认为数据可能尚未体现出来的、极其重要的弱点。
Al1ex
2022/12/22
1.9K0
2021 OWASP TOP 10
Java源码安全审查
最近业务需要出一份Java Web应用源码安全审查报告, 对比了市面上数种工具及其分析结果, 基于结果总结了一份规则库. 本文目录结构如下: 
用户1216491
2018/07/25
3.1K0
Java源码安全审查
10个最重大的Web应用风险与攻防
先来看几个出现安全问题的例子 OWASP TOP10 开发为什么要知道OWASP TOP10 TOP1-注入 TOP1-注入的示例 TOP1-注入的防范 TOP1-使用ESAPI(https://gi
用户1263954
2018/01/30
1.1K0
10个最重大的Web应用风险与攻防
CRLF (%0D%0A) Injection
当浏览器向Web服务器发送请求时,Web服务器用包含HTTP响应标头和实际网站内容(即响应正文)的响应进行答复。HTTP标头和HTML响应(网站内容)由特殊字符的特定组合分隔,即回车符和换行符。简而言之,它们也称为CRLF。
黑伞安全
2020/11/09
6.3K0
CRLF (%0D%0A) Injection
解读OWASP TOP 10
**原理:**将不受信任的数据作为命令或查询的一部分发送到解析器,会产生诸如sql注入、nosql注入、os注入和LADP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期的命令或的访问数据。
黑伞安全
2019/10/16
3.1K0
这可能是最全的入门Web安全路线规划
本次写的是一篇如何通过针对性系统学习Web安全或者说如何能成为一名渗透测试人员(有疑问或者错误的地方还望大家多多指正)。
Gcow安全团队
2020/03/19
1.8K0
最常见的漏洞有哪些?如何发现存在的漏洞呢
漏洞也叫脆弱性(Vulnerability),是计算机系统在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷和不足。漏洞一旦被发现,就可使用这个漏洞获得计算机系统的额外权限,使攻击者能够在未授权的情况下访问或破坏系统,从而导致危害计算机系统安全。
德迅云安全--陈琦琦
2024/03/28
9590
常见web攻击
常见web攻击:https://www.cnblogs.com/morethink/p/8734103.html 搞Web开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事。本篇主要简单介绍在Web领域几种常见的攻击手段及Java Web中的预防方式。
用户5760343
2022/05/19
8320
常见web攻击
HttpOnly是怎么回事?
最近配合公司安全团队开展一些工作,安全团队建议,内部系统(用户端系统有跨域需求,其他方式解决更合适)对接SSO建议开启HttpOnly。HttpOnly?没听说过,赶紧百度一下。
普通程序员
2019/10/23
8.6K1
HttpOnly是怎么回事?
Java(web)项目安全漏洞及解决方式【面试+工作】
Java(web)项目安全漏洞及解决方式【面试+工作】 一.安全性问题层次关系 大家经常会听到看到很多很多有关安全性方面的信息,可以说形形色色,对于在网络安全方面不太专业的同志来说,有点眼花缭乱,理不出头绪。在这里,我来帮大家整理一下。   以我个人多年来从事Web安全方面的工作经验及国外一些权威安全机构对Web安全的层次性的理解,我们通常把它分为三个层次: 1.网络安全。如防火墙、路由器、网络结构等相关的安全问题 2.系统与服务安全。如Window/Linux/Unix系统本身的漏洞或运行于其上的服务的
Java帮帮
2018/06/05
4.5K0
【网络安全】浅识 OWASP
元宇宙的概念想必大家都略有所闻,比较突出的事件就是 Facebook 更名为 Meta,当然今天的主题跟它没啥关系,随着元宇宙概念的爆炸式出现,3D 渲染技术再次受到了巨大关注度。
sidiot
2023/08/31
4530
【网络安全】浅识 OWASP
相关推荐
【软件开发规范四】《应用系统安全编码规范》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档