中科天齐倾情打造《悟空云课堂》旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。本期主题为未检查的错误情况漏洞的相关介绍。
一、什么是未检查的错误情况?
以InterruptedException为例,InterruptedException出现一般都是因为在线程执行的时候被打断(interrupt),线程(A)不是自己打断自己,一般都是在另外一个线程(B)中执行中断方法(objA.interrupt())。
每个线程都管理一个自己的中断状态(interruptionstatus),它可以通过Thread#interrupt()方法设置位中断状态,或者使Thread#interrupted()重置状态。另外,Thread#isInterrupted()通常用来判断是否处于中断状态。
二、未检查的错误情况有什么危害?
若未检查的错误情况不能得到及时处理,会引起意想不到的攻击(OWASP-2004:A7中内有相应的记载),还是拿InterruptedException为例,不正确的错误处理和代码中不能忽略InterruptedExceptions,只需将异常计数记录为“忽略”。这个抛出InterruptedException将清除线程的中断状态,因此如果异常处理不当,则线程被中断的消息将丢失。
三、如何处理未检查的错误情况?
InterruptedExceptions应该立即或在清理之后重新抛出方法的状态,或线程应该通过调用Thread.interrupt() ,即使这是单线程应用。任何其他操作都有可能延迟线程关闭,并丢失线程被中断的信息(可能还没完成任务)。类似地,ThreadDeath异常也可能被传播。根据它的JavaDoc,如果ThreadDeath被一个方法捕获,那么它必须被重新thrown,这样线程才会真正消亡。
四、含有“未检查的错误情况”缺陷的代码样例:
/**
Main processing method for the ThreadWatcher object
**/
public void run()
{
try
{
Tread.sleep(myTimeout);
}
catch (InterruptedException e)
{
// do nothing -- if watcher is interrupted, so is thread
}
interrupt;
}
}
使用Wukong软件代码安全检测修复系统检测上述程序代码,则可以发现代码中存在着“未检查的错误情况”的安全漏洞。请见下图:
软件安全 网络安全的最后一道防线
中科天齐公司是在中科院计算技术研究所的大力推动下
以中科院计算所国际领先的自主研究成果
为基础组建的高新技术企业
关键词标签:悟空云课堂 未检查的错误情况 软件安全检测 代码缺陷检测 代码漏洞修复