成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

java安全編碼指南之:對象構建操作

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

簡介

程序員肯定是不缺對象的,因為隨時都可以構建一個,對象多了肯定會出現點安全問題,一起來看看在java的對象構建中怎么保證對象的安全性吧。

構造函數的異常

考慮下面的一個例子:

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!'); }}

上面的例子中,我們在構造函數中做了一個securityCheck,因為這個securityCheck返回的值是false,所以會拋出SecurityException。

看下調用的例子:

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

這個調用會拋出下面的異常:

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)

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

Finalizer Attack

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

如果該對象已經被構建了,那么這個對象在GC的時候需要執(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,并且實現了finalize方法,在finalize中,我們調用了storeMoney。看下運行的代碼:

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); }

運行結果:

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

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

這個操作就叫做Finalizer Attack。

解決Finalizer Attack

怎么解決這個構造函數拋出異常的問題呢?這里給大家介紹幾種解決方法。

使用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方法

因為子類想要重寫finalize方法,如果我們的父類中finalize方法定義為final,也可以解決這個問題。

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變量

我們可以在對象構建完畢的時候設置一個flag變量,然后在每次安全操作的時候都去判斷一下這個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需要設置為volatile,只有這樣才能保證構造函數在flag設置之前執(zhí)行。也就是說需要保證happens-before特性。

使用this或者super

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

因為Java確保java.lang.Object構造函數在任何構造函數的第一條語句之上或之前執(zhí)行。如果構造函數中的第一個語句是對超類的構造函數或同一個類中的另一個構造函數的調用,則java.lang.Object構造函數將在該調用中的某個位置執(zhí)行。否則,Java將在該構造函數的代碼中的任何一個執(zhí)行之前執(zhí)行超類的默認構造函數,并且將通過隱式調用執(zhí)行java.lang.Object構造函數。

也就是說如果異常發(fā)生在構造函數中的第一條this或者super中的時候,JVM將不會調用對象的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安全編碼指南之:對象構建操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩欧美久久一区| 欧美福利网址| 91美女片黄在线观看91美女| 欧美日韩卡一卡二| 视频一区二区国产| 国产精品日韩欧美一区| 日本一区二区动态图| 99久久精品免费看国产| 日韩免费一区二区三区在线播放| 亚洲国产精品久久一线不卡| 欧美日韩国产综合网| 日韩免费一区二区| 成人激情校园春色| 日本一区中文字幕| 国产精品免费一区二区三区观看| 亚洲欧美中日韩| 91在线看国产| 久久久久久免费网| 国产乱码精品一区二区三区av| 欧美一级播放| 一本色道久久综合亚洲精品按摩| 国产精品午夜春色av| 成人黄色在线视频| 欧美一区二区三区在线观看视频| 视频一区国产视频| 欧美激情国产日韩| 日韩丝袜情趣美女图片| 精品一区二区三区视频| 久久久久久久欧美精品| 亚洲免费三区一区二区| 91丝袜国产在线播放| 精品嫩草影院久久| 国产盗摄视频一区二区三区| 欧美三级在线看| 婷婷国产在线综合| 国产伦精品一区| 一区二区三区四区中文字幕| 伊人久久成人| 国产精品嫩草99a| 欧美日韩国产探花| 国产偷国产偷精品高清尤物 | 欧美专区亚洲专区| 欧美aa在线视频| 色噜噜狠狠成人网p站| 日韩av网站免费在线| 日本精品免费观看高清观看| 日韩黄色免费网站| 另类图片国产| 亚洲超碰精品一区二区| 性色一区二区三区| 性感美女久久精品| 亚洲一区二三| 日韩电影在线观看电影| 中日韩男男gay无套| 亚洲欧洲精品一区二区精品久久久| 国产精品一区二区x88av| 欧美视频一区二区三区在线观看| 日韩av网站免费在线| 久久本道综合色狠狠五月| 夜夜嗨av一区二区三区四季av | av资源网一区| 久久嫩草精品久久久精品| 成人av在线一区二区三区| 亚洲精品在线网站| 成人av网在线| 久久久久国产精品人| 亚洲午夜91| 一区二区三区在线不卡| 美女黄色成人网| 日韩av电影免费观看高清完整版| 久久久综合网| 免费观看一级欧美片| 在线视频欧美区| 九九精品视频在线看| 欧美日韩一区二区三区视频| 免费成人在线观看视频| 欧美mv日韩mv| 欧美午夜精品理论片a级大开眼界| 亚洲欧洲av色图| 亚洲精品无人区| 日韩在线一二三区| 欧美精品久久天天躁| 972aa.com艺术欧美| 欧美国产日本韩| 亚洲精品乱码久久久久久蜜桃91| 亚洲高清久久久| 欧美三区免费完整视频在线观看| 成人免费毛片a| 国产精品毛片久久久久久久| 亚洲在线免费| 精品一区二区免费| 久久久精品天堂| 99日韩精品| 久久综合综合久久综合| 欧美麻豆精品久久久久久| 99久久精品免费看国产免费软件| 亚洲色图20p| 在线欧美小视频| 91丝袜高跟美女视频| 亚洲一区二区不卡免费| 欧美日韩精品系列| 欧美午夜精彩| 麻豆91免费观看| 国产色一区二区| 午夜一区不卡| 久久精品99久久久| 久久亚洲私人国产精品va媚药| 一区在线播放| 亚洲成av人片在线观看无码| 欧美色窝79yyyycom| 成人av高清在线| 亚洲一区二区视频在线| 欧美精品一二三区| 18成人免费观看视频| 激情成人午夜视频| 国产精品久久久久一区| 一本色道久久综合精品竹菊| 成人精品国产一区二区4080| 亚洲伊人色欲综合网| 69精品人人人人| 亚洲午夜精品一区二区| 九色porny丨国产精品| 欧美国产一区视频在线观看| 色婷婷激情久久| 99久久婷婷国产综合精品| 亚洲午夜激情网页| 日韩欧美一区二区视频| 国产欧美日韩综合精品二区| 国产精品资源站在线| 亚洲欧美国产毛片在线| 久久av一区二区三区亚洲| 国产电影一区二区三区| 亚洲免费视频成人| 精品国产污网站| 色婷婷久久久久swag精品| 色综合欧美在线| 日本成人中文字幕| 欧美极品少妇xxxxⅹ高跟鞋 | 日韩在线观看一区二区| 久久一区二区三区国产精品| 99精品国产一区二区青青牛奶 | 国产一区免费视频| 国产在线不卡视频| 一区二区三区在线免费观看 | 国产视频911| 欧美三级韩国三级日本三斤| 亚洲午夜电影| 成人av在线电影| 麻豆一区二区99久久久久| 亚洲欧洲日韩综合一区二区| 欧美一区二区三区在线电影| 国产精品日本一区二区| av亚洲产国偷v产偷v自拍| 日韩中文字幕亚洲一区二区va在线| 欧美精品一区在线观看| 国产亚洲综合精品| 91美女在线看| 午夜精品影院在线观看| 亚洲欧美激情视频在线观看一区二区三区| 91精品国产免费| 美女精品国产| 欧美日韩一区二区视频在线| 国产麻豆9l精品三级站| 视频一区欧美精品| 中文字幕av免费专区久久| 日韩欧美www| 欧美特级限制片免费在线观看| 亚洲一区二区三区午夜| 欧美日韩精品免费观看| 国产精品一区二区免费不卡| 日韩制服丝袜先锋影音| 亚洲在线观看免费视频| 亚洲同性同志一二三专区| 国产调教视频一区| 欧美成人激情免费网| 欧美亚洲国产一区二区三区va| 亚洲国产精品一区制服丝袜| 欧美大片专区| 久久精品72免费观看| 亚洲在线一区二区三区| 国产精品网站在线播放| 精品国产一区久久| 6080国产精品一区二区| 夜夜爽av福利精品导航 | 久久99精品久久久久久国产越南| 国产精品白丝在线| 久久久99久久精品欧美| 6080yy午夜一二三区久久| 久久久久久久久久久久久久一区 | 亚洲精品一区二区三区精华液 | 日韩免费在线观看| 欧美蜜桃一区二区三区| 日本韩国视频一区二区| 久久av一区二区| 国产欧美日韩综合一区在线观看| 欧美 日韩 国产一区二区在线视频| 国产福利一区二区三区视频| 免费在线观看精品| 日本少妇一区二区| 亚洲国产毛片aaaaa无费看 |