use*_*840 3 java security multithreading race-condition secure-coding
以下代码应该容易受到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.
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是,这种竞争条件将如何运作?假设有2个线程T1和T2,其中T1有一组有效的参数,应该通过检查,T2是一个想要在类中设置无效值的黑客.
如果2个线程正在竞争并且这段代码是我们的关键部分,则说T1运行通过检查并休眠.现在,当T2开始运行时,它是否会再次通过检查(并且失败)?
问题是它Date是可变的,所以另一个线程可以改变结束日期:end.setTime(0);在你检查之后start.after(end)(更简单的方式来编写你的条件).
所以它看起来像:
start.after(end)=>返回false,一切看起来都不错end.setTime(0);=>偷偷摸摸的线程2更改日期this.start = start; this.end = end; //boom=>你的班级不变量不再有效| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |