java中Runtime.exec()可能带来的命令注入安全问题的解决办法

这篇具有很好参考价值的文章主要介绍了java中Runtime.exec()可能带来的命令注入安全问题的解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    我们在使用Runtime.getRuntime().exec()的时候,可以指定一个命令或者脚本,让它执行,类似于调用系统指令来进行完成一项任务。

    但是这个方法如果有安全检查,它会被报出一个Command Injection的风险,也就是命令注入的风险,因为命令可能是外部传入,这个时候,正常的命令都不会有任何问题,但是如果被人恶意指定,比如删除系统服务,删除一些特定目录等的操作,就可能造成非常严重的后果。

    所以,一般对于Runtime.exec()这里,需要使用一些安全框架来进行安全检查,一般推荐使用的是 org.owasp.esapi 下的esapi库来进行过滤。

    首先引入依赖:

<dependency>
   <groupId>org.owasp.esapi</groupId>
   <artifactId>esapi</artifactId>
   <version>2.5.1.0</version>
</dependency>

    除此之外,在java中使用,一定要额外引入三个配置文件,它们分别是:ESAPI.properties,validation.properties,esapi-java-logging.properties 。这三个属性配置文件缺一不可,缺少任何一个都会报错。地址在这里:https://github.com/ESAPI/esapi-java-legacy/tree/develop/configuration/esapi

    这三个配置文件放入resources目录。

java中Runtime.exec()可能带来的命令注入安全问题的解决办法

   java示例:

package com.xxx.hello.util;

import org.owasp.esapi.codecs.WindowsCodec;
import org.owasp.esapi.reference.DefaultEncoder;

import java.io.IOException;


public class ProcessExecutor {

    private static final String CMD_PREFIX = "cmd.exe /c start ";

    public static int execCommand(String command) throws IOException, InterruptedException {
        Runtime runtime = Runtime.getRuntime();
        String secureCmd = DefaultEncoder.getInstance().encodeForOS(new WindowsCodec(), command);
        System.out.println("secure command -> " + secureCmd);
        Process exec = runtime.exec(CMD_PREFIX + secureCmd);
        return exec.waitFor();
    }

}

    这是一个方法,我们要在别的地方调用,这里会传入一个指令或者脚本,我测试的时候,传入的是bin\test.bat,也就是当前项目下的bin目录中的一个test.bat脚本,这是在windows上的测试。

    我们运行,可以看打印信息:

java中Runtime.exec()可能带来的命令注入安全问题的解决办法 

    打印信息里面,一个是在类路径CLASSPATH下加载到了ESAPI.properties文件,这就是上面提到的ESAPI配置文件放在resources目录下的原因。

    另外一个是控制台打印的命令信息是bin^\test^.bat,可以看出,通过DefaultEncoder.encodeForOS(new WindowsCodec(), command)进行编码的时候,对命令中的特殊字符都进行了一个转义,这里"^"就是批处理脚本中的转义字符,和一般转义字符"\"有区别。

    这里需要注意的是,我们只需要对有可能产生风险的部分进行编码,而不是对整个exec(command)命令进行编码,如果我们把这里cmd.exe /c start bin\test.bat进行编码,那么这里反而会报出另一个错误。

secure command -> cmd^.exe^ ^/c^ start^ bin^\test^.bat
may be file not found,Cannot run program "cmd^.exe^": CreateProcess error=2, 系统找不到指定的文件。

    这里对整个命令进行编码,最后连cmd.exe指令都进行了转义,自然是无法运行的。 文章来源地址https://www.toymoban.com/news/detail-481155.html

到了这里,关于java中Runtime.exec()可能带来的命令注入安全问题的解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Docker 报错OCI runtime exec failed: exec failed: unable to start container process: exec: “xxx“: exe

    前些天在使用 Docker 运行一个容器时,遇到了一个报错:OCI runtime exec failed: exec failed: unable to start container process: exec: “xxx“: exec。 这个错误让我有些烦躁,因为我刚刚将容器创建好,准备执行相关命令时,却发现容器无法正常启动。在经过一番排查和尝试后,我终于找到了解

    2024年02月15日
    浏览(27)
  • 将非受信数据作为参数传入,可能引起xml 注入,引起数据覆盖,这个问题咋解决

    当将非受信数据作为参数传入时,确实存在XML注入(XML Injection)的风险,攻击者可以通过构造恶意的XML数据来修改XML文档结构或执行意外的操作。为了解决这个问题,你可以采取以下措施: 输入验证和过滤:对于接收到的非受信数据,进行输入验证和过滤,确保只接受符合

    2024年02月13日
    浏览(34)
  • 再谈StringBuilder为什么线程不安全以及带来的问题

    比较有意思的是,学习锁消除的过程中,有人讲到StringBuffer在方法内构建,不会被其他方法引用时,StringBuffer的锁会被消除, 于是,顺便看了一下同源的StringBuidler为什么线程不安全,以及为什么多线程不安全,和带来的问题, 有了这篇文章,分享出来,帮助读者轻松应对知

    2024年02月11日
    浏览(33)
  • WEB安全基础入门—操作系统命令注入(shell 注入)

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏: 《WEB安全基础-服务器端漏洞》 《WEB安全基础-客户端漏洞》 《WEB安全高级-综合利用》 知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路! 欢

    2024年02月01日
    浏览(40)
  • Linux中执行java命令报错:cannot execute binary file: Exec format error

    对于这个问题,如果你确认文件没有损坏、文件权限正确、服务器位数和JDK位数一致,那么本文99.999999%可以解决你的问题。 Java程序在自己的开发环境、测试环境,一切正常,启动命令如下: 某天,终于要在客户的生产环境进行部署了。一切都很愉快,现在万事俱备,只差启

    2024年02月04日
    浏览(38)
  • ChatGPT给软件测试行业带来的可能

    软件测试在软件开发过程中扮演着至关重要的角色,因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展,ChatGPT作为一个强大的自然语言处理工具,可以在软件测试中发挥出许多重要的作用。本文将介绍ChatGPT在软件测试应用中带来的可能,并探讨软件测试

    2023年04月16日
    浏览(31)
  • 有哪些可能引起前端安全的问题?

    跨站脚本 (Cross-Site Scripting, XSS) ⼀种代码注⼊⽅式,为了与 CSS 区分所以被称作 XSS。早期常⻅于⽹络论坛, 起因是⽹站没有对⽤户的输⼊进⾏严格的限制, 使得攻击者可以将脚本上传到帖⼦让其他⼈浏览到有恶意脚本的⻚⾯, 其注⼊⽅式很简单包括但不限于 JavaScript / CSS / Flash 等

    2024年02月13日
    浏览(27)
  • Web3是什么?它可能带来哪些创业/财富机会?

    Web3是指第三代互联网,是对当前Web技术和应用模式的一种演进和扩展。 它主要关注去中心化、区块链技术和加密货币的应用,以及用户数据的隐私和所有权保护。Web3旨在重塑互联网的基本架构和运行方式,使用户能够更好地控制自己的数据、参与经济活动,并实现更开放、

    2024年02月07日
    浏览(45)
  • 运行java命令时报错Error: opening registry key ‘Software\JavaSoft\Java Runtime Environment‘

    cmd使用java+任何参数都报这个错误,具体报错情况如下: 报错解释说明: 1.Error: opening registry key ‘SoftwareJavaSoftJava Runtime Environment’ 说明:打开注册表SoftwareJavaSoftJava Runtime Environment失败(去注册表查看,没有找到该目录) 2.Error: could not find java.dll 说明:未找到java.dll文件

    2023年04月08日
    浏览(29)
  • 【Java】 java | git | win系统重装会给开发环境带来哪些问题

            1、近期发现电脑用起来不丝滑了,文件夹操作卡顿,一阵操作还会蓝屏         2、不能忍,整理排查         1、CPU: I5-9400F 2.9GHz 6核         2、内存: 32G         3、固态:256G         4、机械:1T         5、盘符使用情况(C盘是重装系统

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包