常见的Java漏洞
Java语言学习之常见的Java漏洞,通过具体的内容向大家展现,希望对大家对Java开发的学习有所帮助。
人们往往默认代码是安全的,漏洞或潜在的攻击总是放到后才考虑。大多数时候,我们脑子里想的都是sprint、 scrum、会议记录,以及市场营销获得批准的进展。
数据是数字黄金,代码承载着数据。虽然Java这一服务器端语言相对安全,但是黑客仍有很多方法来攻击和访问隐私数据。
以下是10个常见的Java漏洞以及预防措施,可帮助大家尽快识别并抵御代码中可能出现的漏洞。
1.代码注入
接受输入的应用程序都容易受到代码注入的攻击。当通过输入传递的数据对程序运行或返回数据的方式造成意想不到的副作用时,就会发生代码注入。
仔细想想,表单是一个双向的过程。输入数据后,应用程序处理数据并返回结果。如果结果不符合期望,就会让应用程序处于易受攻击的状态。
代码注入经常发生,其容易程度超出想象。2010年,一位日本开发者注意到可以将HTML作为推特发送。通过在HTML中添加一些JavaScript,他利用半夜人们熟睡的时间在Twitter上发送了一小段蠕虫代码。
这一小段代码有什么用?
只要用户将鼠标悬浮在这段代码上面,就会立即转发。所以关注者滚动鼠标,就是在转发那段蠕虫代码。这在几分钟内就产生了超过3000次转发的连锁效应。
虽然Twitter不只在堆栈中使用了Java,但这一警示事件可以用于保护输入表单。简单的方法是应用带有输出清理和转义的输入验证。这意味着根据应用程序正在执行的任务,任何发送HTML代码的尝试都会被解析或拒绝。
2.命令注入
操作系统命令注入(通常称为shell注入)是一个安全漏洞,它允许攻击者在运行应用程序的服务器上执行shell命令。PHP通常是命令注入的目标,因为它在默认情况下调用sh/bash/cmd。然而,Java执行已给定命令的fork()来创建子进程并向其传递给定参数。
然而,这并不能增加代码的安全。
应用程序可能被分割成不同级别的遗留代码,这些代码组合在一起形成终的产物。这些遗留产物可以作为shell命令注入的输入方式。
有时可能需要向服务器发出命令行,例如发送确认电子邮件。与其使用Runtime.exec()来访问服务器,不如使用位于javax.mail中的可用Java API。
3.连接字符串注入
连接字符串是一组用于将应用程序连接到数据源的术语。它可以连接到关系数据库、LDAP目录和文件。
对于数据库连接字符串注入,恶意用户需要四个参数:数据源、初始目录、用户名和密码。当攻击者使用分号作为分隔符将参数注入连接字符串以获得访问权,就会发生连接字符串攻击。
这里的问题是,一些数据库提供商没有限定上限,而是运行“后一个函数成功”的算法。这意味着攻击者可以运行多个连接注入字符串,用重复参数污染它们,同时数据库进行有效组合。因此,攻击者终绕过了正常的身份验证过程,不被强制退出。
例如,注入的连接字符串可以是这样的:
Data Source = myDataSource; Initial Catalog = db; Integrated Security = no; User ID = myUsername; Password = XXX; Intergrated Security = true; Data Source = myDataSource; Initial Catalog = db; Integrated Security = no; User ID = myUsername; Password = XXX; Intergrated Security = no;
一旦进入,恶意用户可以劫持凭证并将其修改为他们想要的任何内容。
4.LDAP注入
LDAP注入利用输入验证并注入可执行查询。LDAP是轻量级目录访问协议,是一种开放的、跨平台的用于目录服务认证的协议。LDAP是一种通信语言,应用程序可以利用它访问目录服务器。这些目录服务器通常存储用户名、密码、帐户详细信息和其他可以与网络上的其他实体共享的信息。
当应用程序将未经处理的输入直接插入LDAP语句时,就会发生LDAP注入。在这种情况下,攻击者可以使用LDAP筛选器语法,这种语法可以让服务器执行其他查询和LDAP语句。
防止LDAP注入简单的方法是确保LDAP特殊字符( ) ! | & *在验证时被转义或拒绝。
5.基于反射的XSS攻击
反射XSS攻击,或反射跨域脚本攻击,是一个添加恶意脚本的过程,这种恶意脚本是通过链接激活的,其之后产生的指令会将用户传送到其他地方。例如,一个反射XSS可以嵌入到用户评论区,与网站的其他部分混合在一起。如果用户点击它就会跳转到第三方网站,然后重新回到原来的网站。
而在第三方网站可以会出现cookie或会话窃取等恶意活动。虽然监控反射XSS很难,但垃圾邮件过滤器可以减少链接提交的频率。
6.资源注入
当攻击者成功地更改应用程序用于执行恶意任务的资源标识符时,就会发生资源注入。这可能是修改端口号、修改文件名,以及获得执行或访问其他资源的能力。
这是怎么发生的?通常是在应用程序通过用户输入定义资源的时候。
例如,假设攻击者通过连接字符串注入获得了对购物站点的访问权限,或者通过XSS成功窃取了用户的详细信息,那他们就可以使用资源注入修改或查询详细信息,可以在用户不知晓的情况下,通过在站点订购东西、修改或窃取更多的信息来造成破坏。
7.SQL注入
SQL注入是一个在数据请求中注入SQL的过程,这会导致后端应用程序将机密数据返回或在数据库上执行恶意脚本的内容。
这可能导致死机、数据访问和隐私侵犯。不仅如此,SQL注入还可能导致数据丢失或损坏,并让用户无法进入自己的数据库。这时,注入已经完全控制了数据。简单的解决方法是确保在服务器端进行验证。前端输入可以很容易地绕过,而后端是防止不必要的字符(如空格和引号)注入的后盾。
上一篇:大数据学习可以从哪几个方面入手
下一篇:istitle()函数的使用