Java面试进阶31:Java应用开发中的注入攻击?

原则上提供动态执行能力的语言特性,都需要提防发生注入攻击的可能。

1)SQL 注入攻击(输入校验,不允许输入标点符号等特殊字符,或者特定结构的输入、不用完全动态的 SQL,而是利用 PreparedStatement、数据库对查询、修改等权限进行了合理限制)

2)操作系统命令注入。Java 语言提供了类似 Runtime.exec(…) 的 API,可以用来执行特定命令,假设我们构建了一个应用,以输入文本作为参数“input_file_name;rm –rf /*”,这就有可能出现问题了

3)XML 注入攻击。Java 核心类库提供了全面的 XML 处理、转换等各种 API(XPATH)

 

Java安全机制:

 

1、运行时安全机制:类加载过程中,进行字节码验证;类加载器本身也可以对代码之间进行隔离;利用 SecurityManger 机制和相关的组件,限制代码的运行时行为能力;GC

2、Java 提供的安全框架 API,这是构建安全通信等应用的基础。例如:

加密、解密 API。

授权、鉴权 API。

安全通信相关的类库,比如基本 HTTPS 通信协议相关标准实现,如TLS 1.3;或者附属的类似证书撤销状态判断(OSCP)等协议实现

3、 就是 JDK 集成的各种安全工具:

keytool,这是个强大的工具,可以管理安全场景中不可或缺的秘钥、证书等,并且可以管理 Java 程序使用的 keystore 文件。jarsigner,用于对 jar 文件进行签名或者验证。

 

你想了解更多安全漏洞的信息,可以从通用安全漏洞库(CVE)等途径获取,其他常见安全问题:

Man-In-The-Middle(MITM)攻击:中间人攻击最容易理解的可能就是fiddler吧,他可以截获request重新组织request的数据,有个专业的攻击工具叫burp。(HTTPS、不要点击恶意链接或电子邮件)

DOS攻击:利用大量机器发送请求,将目标网站的带宽或者其他资源耗尽。利用哈希碰撞发起拒绝服务攻击(DOS,Denial-Of-Service attack):构造大量相同哈希值的数据,然后以 JSON 数据的形式发送给服务器端(防火墙)

阿里巴巴json的漏洞

在密码使用的场景中,比如用户注册/登录。
我使用 char[] 数组存储和验证密码,并在使用结束后,通过随机的字符覆盖掉 char[]。
如果使用 string 存储密码,由于它的不可变性,它的缺陷是会一直驻留在堆中,直到未来被垃圾回收。

SQL注入,IO流没有关闭,使用不安全Random,重定向Url合法性没做检验,上传文件前后端没做文件大小类型校验。通过反射方式访问私有方法。日志包含敏感信息,没有禁止除GET,POST以外的HTTP请求等等

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值