1. 程式人生 > >淺談Java程式碼安全(二)

淺談Java程式碼安全(二)

先來看一段程式碼:

//x, y, z 都是 int 型別
if (x + y < z) {
}

這段程式碼是否存在問題呢,可能不仔細或者對資料結構不充分了解的同學就直接這麼過了,當然大多數情況下可能這段程式碼也不會產生問題,但是還是那句話,安全傾向於 “明顯沒有漏洞”,而不是“沒有明顯漏洞”,這裡的問題是數值型別會溢位,不僅僅會導致程式判斷出現誤判,嚴重的話還會影響整個業務,而且難以復現。

完全可以這麼寫

if(z-x>y){
}

還有類似的陣列越界問題也是時常發生,如下

public int test(i){
int [] a={1,2}; 
return a[i];
}

這裡如果i=2即會報錯: Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException 而這些只要我們做好入參的限制,完全都是可以規避的。

還有如下:

try {  } catch (Exception e){
throw new RuntimeException(hostname + port+"error")
}

有的同學為了方便查詢錯誤直接把出錯的資訊這麼給丟擲,一個 Web 應用,異常如果沒有良好的包裝起來,那麼就會把個人資訊暴露給客戶端,產生資訊洩露等問題。