日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

java安全編碼指南之:對象構(gòu)建操作

瀏覽:39日期:2022-08-24 17:22:45

簡介

程序員肯定是不缺對象的,因?yàn)殡S時(shí)都可以構(gòu)建一個(gè),對象多了肯定會(huì)出現(xiàn)點(diǎn)安全問題,一起來看看在java的對象構(gòu)建中怎么保證對象的安全性吧。

構(gòu)造函數(shù)的異常

考慮下面的一個(gè)例子:

public class SensitiveOperation { public SensitiveOperation(){ if(!doSecurityCheck()){ throw new SecurityException('Security check failed!'); } } //Security check return false private boolean doSecurityCheck(){ return false; } public void storeMoney(){ System.out.println('Store 1000000 RMB!'); }}

上面的例子中,我們在構(gòu)造函數(shù)中做了一個(gè)securityCheck,因?yàn)檫@個(gè)securityCheck返回的值是false,所以會(huì)拋出SecurityException。

看下調(diào)用的例子:

public static void main(String[] args) { SensitiveOperation sensitiveOperation = new SensitiveOperation(); sensitiveOperation.storeMoney(); }

這個(gè)調(diào)用會(huì)拋出下面的異常:

Exception in thread 'main' java.lang.SecurityException: Security check failed! at com.flydean.SensitiveOperation.<init>(SensitiveOperation.java:11) at com.flydean.SensitiveUsage.main(SensitiveUsage.java:10)

那么問題來了,上面的這個(gè)class是不是安全的呢?

Finalizer Attack

上面的class不是final的,所以我們可以構(gòu)造一個(gè)class去繼承它。然后考慮這樣一個(gè)問題,當(dāng)構(gòu)造函數(shù)拋出異常之后,會(huì)執(zhí)行什么操作呢?

如果該對象已經(jīng)被構(gòu)建了,那么這個(gè)對象在GC的時(shí)候需要執(zhí)行finalize方法。那么我們是不是可以在finalize方法中繞過安全檢查呢?

看下面的例子:

public class SensitiveOperationFinalizer extends SensitiveOperation{ public SensitiveOperationFinalizer(){ } @Override protected void finalize() { System.out.println('We can still do store Money action!'); this.storeMoney(); System.exit(0); }}

上的例子中,我們繼承了SensitiveOperation,并且實(shí)現(xiàn)了finalize方法,在finalize中,我們調(diào)用了storeMoney。看下運(yùn)行的代碼:

public void testFinalizer() throws InterruptedException { try { SensitiveOperation sensitiveOperation = new SensitiveOperationFinalizer(); sensitiveOperation.storeMoney(); }catch (Exception e){ System.out.println(e.getMessage()); } System.gc(); Thread.sleep(10000); }

運(yùn)行結(jié)果:

Security check failed!We can still do store Money action!Store 1000000 RMB!

可以看到,雖然我們構(gòu)造函數(shù)拋出了異常,但是storeMoney的操作還是被執(zhí)行了!

這個(gè)操作就叫做Finalizer Attack。

解決Finalizer Attack

怎么解決這個(gè)構(gòu)造函數(shù)拋出異常的問題呢?這里給大家介紹幾種解決方法。

使用final class

如果使用final class,那么類是不能夠被繼承的,問題自然就解決了。

public final class SensitiveOperationFinal { public SensitiveOperationFinal(){ if(!doSecurityCheck()){ throw new SecurityException('Security check failed!'); } } //Security check return false private boolean doSecurityCheck(){ return false; } public void storeMoney(){ System.out.println('Store 1000000 RMB!'); }}

使用final finalize方法

因?yàn)樽宇愊胍貙慺inalize方法,如果我們的父類中finalize方法定義為final,也可以解決這個(gè)問題。

public final class SensitiveOperationFinal { public SensitiveOperationFinal(){ if(!doSecurityCheck()){ throw new SecurityException('Security check failed!'); } } //Security check return false private boolean doSecurityCheck(){ return false; } public void storeMoney(){ System.out.println('Store 1000000 RMB!'); } final protected void finalize() { }}

使用flag變量

我們可以在對象構(gòu)建完畢的時(shí)候設(shè)置一個(gè)flag變量,然后在每次安全操作的時(shí)候都去判斷一下這個(gè)flag變量,這樣也可以避免之前提到的問題:

public class SensitiveOperationFlag { private volatile boolean flag= false; public SensitiveOperationFlag(){ if(!doSecurityCheck()){ throw new SecurityException('Security check failed!'); } flag=true; } //Security check return false private boolean doSecurityCheck(){ return false; } public void storeMoney(){ if(!flag){ System.out.println('Object is not initiated yet!'); return; } System.out.println('Store 1000000 RMB!'); }}

注意,這里flag需要設(shè)置為volatile,只有這樣才能保證構(gòu)造函數(shù)在flag設(shè)置之前執(zhí)行。也就是說需要保證happens-before特性。

使用this或者super

在JDK6或者更高版本中,如果對象的構(gòu)造函數(shù)在java.lang.Object構(gòu)造函數(shù)退出之前引發(fā)異常,則JVM將不會(huì)執(zhí)行該對象的finalize方法。

因?yàn)镴ava確保java.lang.Object構(gòu)造函數(shù)在任何構(gòu)造函數(shù)的第一條語句之上或之前執(zhí)行。如果構(gòu)造函數(shù)中的第一個(gè)語句是對超類的構(gòu)造函數(shù)或同一個(gè)類中的另一個(gè)構(gòu)造函數(shù)的調(diào)用,則java.lang.Object構(gòu)造函數(shù)將在該調(diào)用中的某個(gè)位置執(zhí)行。否則,Java將在該構(gòu)造函數(shù)的代碼中的任何一個(gè)執(zhí)行之前執(zhí)行超類的默認(rèn)構(gòu)造函數(shù),并且將通過隱式調(diào)用執(zhí)行java.lang.Object構(gòu)造函數(shù)。

也就是說如果異常發(fā)生在構(gòu)造函數(shù)中的第一條this或者super中的時(shí)候,JVM將不會(huì)調(diào)用對象的finalize方法:

public class SensitiveOperationThis { public SensitiveOperationThis(){ this(doSecurityCheck()); } private SensitiveOperationThis(boolean secure) { } //Security check return false private static boolean doSecurityCheck(){ throw new SecurityException('Security check failed!'); } public void storeMoney(){ System.out.println('Store 1000000 RMB!'); }}

本文的例子:

learn-java-base-9-to-20/tree/master/security

以上這篇java安全編碼指南之:對象構(gòu)建操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产黄大片在线观看| 好吊视频一区二区三区四区| 久久国产精品久久久久久电车| 亚洲精品888| 亚洲作爱视频| 日韩欧美三区| 国产精品a级| 国产精品115| 欧美日韩精品免费观看视欧美高清免费大片 | 日本午夜免费一区二区| 国产欧美综合一区二区三区| 精品国产中文字幕第一页| 91精品国产乱码久久久久久久| 欧美资源在线| 国产精品白丝久久av网站| 亚洲黄色网址| 水蜜桃久久夜色精品一区的特点 | 丝袜美腿诱惑一区二区三区| 久久婷婷一区| 亚洲人www| 免费一级欧美在线观看视频 | 国产亚洲精品美女久久| 日韩1区在线| 日韩亚洲国产欧美| 国产精品白丝一区二区三区| 久久精品青草| 日韩在线成人| 午夜影院一区| 亚洲欧洲免费| 国产不卡av一区二区| 亚洲午夜在线| 国产伦理久久久久久妇女| 欧美亚洲日本精品| 日本亚洲最大的色成网站www| 九九九精品视频| 久久国产精品亚洲77777| 免费在线亚洲| 久久国产福利| 久久毛片亚洲| 日韩高清在线观看一区二区| 日本少妇一区| 国产欧美久久一区二区三区| 99精品网站| 国产日韩高清一区二区三区在线 | 91精品综合| 国产伦理一区| 免费视频最近日韩| 日韩国产欧美| 国产欧美亚洲一区| 伊人久久成人| 亚洲女同av| 国产九九精品| 亚洲精一区二区三区| 久久香蕉国产| 国产高清日韩| 日本不卡在线视频| 国产一区日韩一区| 欧美成a人片免费观看久久五月天| 欧美日韩免费观看一区=区三区| 国产精品一区高清| 蜜臀精品久久久久久蜜臀 | 国产精品66| 日韩欧美中文字幕一区二区三区| 久久在线免费| 亚洲啊v在线| 精品伊人久久| 婷婷五月色综合香五月| 亚洲第一精品影视| 久久亚洲国产精品尤物| 日本一区中文字幕| 综合国产精品| 午夜久久免费观看| 日韩不卡免费高清视频| 精品国产午夜肉伦伦影院 | 欧美日本久久| 亚洲精品高潮| 丝袜脚交一区二区| 亚洲少妇自拍| 中日韩男男gay无套| 精品一区在线| 日韩免费看片| 都市激情国产精品| 91偷拍一区二区三区精品| 麻豆久久久久久久| 久久精品一区二区三区中文字幕| 91精品啪在线观看国产爱臀| 亚洲丝袜美腿一区| 午夜在线一区二区| 一区在线观看| 天使萌一区二区三区免费观看| 国产高清一区| 国产一区91| 国产美女精品| 热久久免费视频| 只有精品亚洲| 中文无码日韩欧| 午夜久久av| 亚欧洲精品视频在线观看| 日韩影片在线观看| 国产日韩欧美一区在线| 国产精品.xx视频.xxtv| 精品九九久久| 日韩在线短视频| 欧美不卡在线| 亚洲一区欧美二区| 少妇精品久久久一区二区| 日韩黄色免费网站| 国产精品最新自拍| 四虎8848精品成人免费网站| 日本а中文在线天堂| 成人va天堂| 亚洲欧美日本日韩| 青草久久视频| 国产在线一区不卡| 日本在线精品| 国产精品日韩久久久| 亚洲精品激情| 欧美国产极品| 成人午夜国产| 亚洲久久一区| 荡女精品导航| 91高清一区| 97久久亚洲| 激情亚洲影院在线观看| 久久亚洲风情| 国产精品videossex| 久久精品国语| 亚洲精品四区| 精品少妇一区| 国产农村妇女精品一二区| 国产日产一区| 99精品综合| 奇米色欧美一区二区三区| 国产一区二区三区不卡av | 日韩久久精品网| 一区二区国产精品| 国产福利91精品一区二区| 国产综合婷婷| 日本久久二区| 日本高清不卡一区二区三区视频| 丝袜美腿一区二区三区| 久久97视频| 久久av在线| 久久久久久网| 亚洲理论在线| 另类中文字幕国产精品| 日韩毛片网站| 三上悠亚国产精品一区二区三区| 视频一区中文字幕精品| 电影亚洲精品噜噜在线观看| 亚洲精品美女| 99精品综合| 麻豆精品在线播放| 国产精品日本| 精品视频在线观看网站| 午夜在线一区二区| 国产中文在线播放| 日韩高清在线不卡| 日韩午夜精品| 在线天堂资源www在线污| 91亚洲精品视频在线观看| 久久免费高清| 国产精品igao视频网网址不卡日韩 | 久久亚洲美女| 免费福利视频一区二区三区| 国产精品一区二区美女视频免费看| 久久亚洲在线| 欧美激情网址| 日本va欧美va欧美va精品| 欧美日韩四区| 丝袜诱惑一区二区| 国产精品成人3p一区二区三区| 麻豆久久精品| 黑森林国产精品av| 欧美片第1页综合| 亚洲精品1区| 国产拍在线视频| 国产精品天天看天天狠| 精精国产xxxx视频在线野外 | 在线观看亚洲精品福利片| av资源中文在线天堂| 欧美日本不卡高清| 综合色一区二区| 欧美freesex黑人又粗又大| 国产精品美女午夜爽爽| 亚洲区欧美区| 爽爽淫人综合网网站| 亚洲二区在线| 伊人久久高清| 欧产日产国产精品视频| 久久影院资源站| 国产日韩欧美三区| 日韩av中文字幕一区二区三区| 中文字幕免费精品| 免费一级片91| 日韩精品一区第一页| 日韩午夜电影| 亚洲制服少妇| 亚洲欧美日韩视频二区| 狠狠爱www人成狠狠爱综合网|