加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – TOCTOU中的竞争条件如何运作?

发布时间:2020-12-15 04:16:43 所属栏目:Java 来源:网络整理
导读:以下代码应该容易受到TOCTOU攻击: public Period(final Date start,final Date end) { if (start.compare(end) 0) { throw new IllegalArgumentException(""); } this.start = start; this.end = end; // Class period has 2 private final member // varia
以下代码应该容易受到TOCTOU攻击:

public Period(final Date start,final Date end) {
    if (start.compare(end) > 0) {
       throw new IllegalArgumentException("");
    }

    this.start = start;
    this.end = end;      // Class period has 2 private final member 
                         // variables Date start & end.

 }

我不明白的是,这种竞争条件将如何运作?假设有2个线程T1和T2,其中T1有一组有效的参数,应该通过检查,T2是一个想要在类中设置无效值的黑客.

如果2个线程正在竞争并且这段代码是我们的关键部分,则说T1运行通过检查并休眠.现在,当T2开始运行时,它是否会再次通过检查(并且失败)?

解决方法

问题是Date是可变的,所以另一个线程可以改变结束日期:end.setTime(0);检查完start.after(结束)后(更简单的方法来写你的病情).

所以它看起来像:

> T1:start.after(end)=>返回false,一切看起来都不错> T2:end.setTime(0); =>偷偷摸摸的线程2更改日期> T1:this.start = start; this.end = end; // boom =>你的班级不变量不再有效

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读