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

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

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

瀏覽:43日期: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去繼承它。然后考慮這樣一個問題,當構造函數拋出異常之后,會執行什么操作呢?

如果該對象已經被構建了,那么這個對象在GC的時候需要執行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的操作還是被執行了!

這個操作就叫做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設置之前執行。也就是說需要保證happens-before特性。

使用this或者super

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

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

也就是說如果異常發生在構造函數中的第一條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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区二区三区网站| 视频一区在线视频| 亚洲资源网站| 在线精品小视频| 久热re这里精品视频在线6| 91看片一区| 欧美久久精品一级c片| 蜜臀久久99精品久久久久久9| 一区二区精品| 日韩av一区二区三区四区| 欧美欧美黄在线二区| 精品国产亚洲一区二区三区大结局| 国产精品igao视频网网址不卡日韩| 国产精品s色| sm久久捆绑调教精品一区| 激情综合自拍| 少妇高潮一区二区三区99| 婷婷综合社区| 中文字幕一区日韩精品| 久久精品伊人| 99精品在线观看| 日本大胆欧美人术艺术动态| 国产亚洲欧美日韩在线观看一区二区 | 亚洲伊人精品酒店| 欧美偷窥清纯综合图区| 亚洲精品在线a| 成人国产精选| 爽好久久久欧美精品| 久久国产精品免费一区二区三区| 一本大道色婷婷在线| 国产免费成人| 国产极品模特精品一二 | 免费在线播放第一区高清av| 成人羞羞在线观看网站| 一区二区高清| 青青青免费在线视频| 一区二区日韩免费看| 国产一区二区色噜噜| 亚洲深夜av| 久久都是精品| 神马午夜在线视频| 日韩欧美中文字幕电影| 成人小电影网站| 综合激情网...| 成人va天堂| 国产精品va| 亚洲尤物在线| 国产夫妻在线| 婷婷精品在线观看| 久久久国产精品一区二区中文| 亚洲精品乱码久久久久久蜜桃麻豆 | 免费久久精品| 久久av中文| 香蕉成人久久| 精品一级视频| 亚洲精品一级| 欧美日韩精品在线一区| 欧美精品中文字幕亚洲专区| 影音先锋久久| 日韩电影免费网址| 国产精品一区二区99| 免费人成在线不卡| 国产在线|日韩| 欧美xxxx中国| 日韩精品电影一区亚洲| 亚洲免费精品| 另类小说一区二区三区| 欧美日韩精品免费观看视频完整| 高清一区二区三区av| 欧美影院视频| 日本精品久久| 亚洲精品人人| 一本一本久久| 欧美综合另类| 日韩高清不卡| 色在线视频观看| 精品女同一区二区三区在线观看| 涩涩涩久久久成人精品| 热久久免费视频| 国产成年精品| 麻豆中文一区二区| 日韩高清一区| 女同性一区二区三区人了人一 | 国产高清不卡| 国产不卡精品| 日韩avvvv在线播放| 蜜桃视频一区二区三区| 午夜在线一区二区| 狠狠干综合网| 欧美日韩国产在线一区| 精品日韩毛片| 国产高清一区二区| 999久久久亚洲| 国产欧美日韩免费观看| 午夜电影一区| 亚洲一区亚洲| 中文精品在线| 合欧美一区二区三区| 亚洲一区日韩| 日韩中文字幕av电影| 免费人成在线不卡| 日韩av一区二区三区| 日本成人在线视频网站| 日韩精品一区二区三区中文| 欧美日韩调教| 久久国产三级精品| 国产精品多人| 精品亚洲精品| 国产精品久久久久久久免费软件| 国产精品久久久久久久久久妞妞| 国产伦精品一区二区三区视频| 久久99影视| 久久久久久久欧美精品| 亚洲一区中文| 蜜臀a∨国产成人精品| 免费久久99精品国产| 中文字幕成人| 日本va欧美va精品发布| 日韩精品a在线观看91| 欧美久久亚洲| 高清日韩欧美| 亚洲精品成人| 香蕉久久一区| 久久男人av| 久久国产毛片| 亚洲欧美日韩在线观看a三区| 在线视频亚洲欧美中文| 国产乱码精品一区二区三区四区 | 亚洲视频www| 日本不卡不码高清免费观看| 国产精品一区二区三区四区在线观看| 国产69精品久久| 亚洲激情偷拍| 欧美亚洲免费| 日韩中文首页| 亚洲开心激情| а√天堂8资源中文在线| 免费欧美一区| 久久av资源| 亚州av乱码久久精品蜜桃| 日韩精品1区2区3区| 日韩高清一级| 久久人人88| 国产欧美88| 亚洲网站视频| 欧美一区在线观看视频| 欧美色图国产精品| 国产亚洲一区二区三区啪| 在线亚洲人成| 日韩高清欧美激情| 久久婷婷av| 国产视频网站一区二区三区| 99热精品久久| 久久国产欧美日韩精品| 99精品一区| 国产精品久久777777毛茸茸| 成人在线视频中文字幕| 综合激情五月婷婷| 岛国av在线网站| 亚洲狼人精品一区二区三区| 深夜视频一区二区| 欧美激情日韩| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美激情五月| 日本大胆欧美人术艺术动态| 色偷偷色偷偷色偷偷在线视频| 日本免费新一区视频| 国产综合亚洲精品一区二| 国产精品日本一区二区三区在线| 一区在线观看| 成人国产精选| 欧美日韩国产探花| 97精品国产| 国产乱码精品一区二区亚洲| 在线视频亚洲欧美中文| 天堂资源在线亚洲| 免费在线成人| 婷婷综合福利| 欧美日韩四区| 精品久久久久中文字幕小说| 日韩1区2区3区| 爽爽淫人综合网网站| av在线日韩| 免费在线观看一区| 青草久久视频| 亚洲在线网站| 亚洲www啪成人一区二区| 欧美成人一二区| 日日夜夜免费精品| 婷婷亚洲综合| 视频福利一区| 热三久草你在线| 国产精品成人一区二区不卡| 国产精品综合色区在线观看| 老色鬼久久亚洲一区二区| 欧美成人日韩| 一区二区视频欧美| 偷拍欧美精品| 欧美综合另类| 一区二区三区四区在线看|