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

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

java安全編碼指南之:表達式規則說明

瀏覽:14日期:2022-08-24 17:57:09

簡介

在java編寫過程中,我們會使用到各種各樣的表達式,在使用表達式的過程中,有哪些安全問題需要我們注意的呢?一起來看看吧。

注意表達式的返回值

我們在使用JDK庫的時候,一定要注意認真的讀一下JDK中方法的含義和它的返回值。

有些返回值可能表示這個操作是否成功,有的返回值可能是方法操作的結果。我們看兩個常見的例子:

public void deleteFileWrong(){ File file= new File('/tmp/www.jb51.net.txt'); file.delete(); System.out.println('File delete success!'); } public void deleteFileRight(){ File file= new File('/tmp/www.jb51.net.txt'); if(file.delete()){ System.out.println('File delete success!'); } }

先看一個文件刪除的例子,delete方法是有返回值的,所以我們在調用delete方法之后,一定要判斷一下返回值,看是否刪除成功。

再看一個常見的String中字符替換的例子:

public void stringReplaceWrong(){ String url='www.jb51.net'; url.replace('www','WWW'); System.out.println('replaced url...'+url); } public void stringReplaceRight(){ String url='www.jb51.net'; url=url.replace('www','WWW'); System.out.println('replaced url...'+url); }

我們要記住,String是不可變的,所以它的replace方法,會返回一個替換過后的String,但是原String是不變的,所以我們需要將返回值重新賦值。

注意避免NullPointerException

NullPointerException應該是最最常見的運行時異常了。怎么避免這個異常呢?

我們要做的就是在調用object的方法時候,一定要判斷這個object是不是為空。

在JDK8之后,我們引入了Stream操作:

public void streamWrong(Collection<Object> collection){ collection.stream().filter(obj->obj.equals('www.jb51.net')); }

Stream操作的過程中,我們需要注意stream中的元素是否為空。

有時候,我們可能覺得已經判斷是為空了,但是條件判斷不準確,導致未知的異常,看下面這個例子:

public int countWrong(Collection<Object> collection, Object object){ int count=0; if(collection ==null){ return count; } for(Object element: collection){ if((element ==null && object== null) || element.equals(object)){ count++; } } return count; }

這個例子是用來查找collection中到底有多少元素和object相同,如果兩者都為空,也記為相同。

但是上面的例子有一個漏洞,它沒有考慮element ==null 而 object !=null的情況,所以會導致NullPointerException的生成。

我們需要這樣修改:

public int countRight(Collection<Object> collection, Object object){ int count=0; if(collection ==null){ return count; } for(Object element: collection){ if((element ==null && object== null) || (element !=null && element.equals(object))){ count++; } } return count; }

數組相等的判斷

如果我們需要比較兩個數組是否相等,其實我們想比較的是兩個數組中的元素是否相等。

我們知道數組是一個特殊的Object,那么數組對象也有一個equals方法,考慮下面的例子:

public boolean compareWrong(){ int[] array1 = new int[10]; int[] array2 = new int[10]; return array1.equals(array2); }

返回的結果是false,因為數組直接使用了Object中定義的equals方法,我們看下該方法的定義:

public boolean equals(Object obj) { return (this == obj); }

可以看到,該方法比較的是兩個地址是否相等。所以我們的到了false結果。

其實,我們可以使用Arrays.equals工具類中的方法來進行兩個數組的比較:

public boolean compareRight(){ int[] array1 = new int[10]; int[] array2 = new int[10]; return Arrays.equals(array1, array2); }

基礎類型的封裝類間的比較

在java中,我們知道有一些基礎類型像boolean, byte,char, short, int他們會有相對應的封裝類型:Boolean,Byte,Character,Short,Integer等。

我們可以直接將基礎類型的值賦值給封裝類型,封裝類型會自行進行轉換。

考慮下面的例子:

Boolean boolA=true; Boolean boolB=true; System.out.println(boolA==boolB);

結果是多少呢?

答案是true。為什么兩個不同對象的比較會是true呢?

在回答這個問題之前,我們看一下字符串的比較:

String stringA='www.jb51.net'; String stringB='www.jb51.net'; System.out.println(stringA==stringB);

這個我們大家應該都知道,因為String有一個字符串常量池,直接從字符串常量構建的String對象,其實是同一個對象。

同樣的對于Boolean和Byte來說,如果直接從基礎類值構建的話,也是同一個對象。

而對于Character來說,如果值的范圍在u0000 to u007f,則屬于同一個對象,如果超出了這個范圍,則是不同的對象。

對于Integer和Short來說,如果值的范圍在-128 and 127,則屬于同一個對象,如果超出了這個范圍,則是不同的對象。

再考慮下面的例子:

Boolean boolA=true;Boolean boolC=new Boolean(true);System.out.println(boolA==boolC);

輸出的結果是false,因為boolC使用了new關鍵字,構建了一個新的對象。

集合中類型不匹配

現在java集合可以通過指定類型,從而只存儲特定類型的對象。考慮下面的一個例子:

public void typeMismatch(){ HashSet<Short> shortSet= new HashSet<>(); for(int i=0;i<10;i++){ shortSet.add((short)i); shortSet.remove(i); } System.out.println(shortSet.size()); }

上面代碼我們定義了一個Short的集合,然后將0-9添加進去,接著我們又調用了remove方法把i從集合刪除。

但是最后輸出結果是10,表明我們并沒有刪除成功。為什么呢?

看下HashSet的remove方法:

public boolean remove(Object o) { return map.remove(o)==PRESENT; }

remove方法的參數是Object,我們傳入的i是int類型的,跟short不匹配,所以導致刪除失敗。

我們需要這樣修改:

public void typeMatch(){ HashSet<Short> shortSet= new HashSet<>(); for(int i=0;i<10;i++){ shortSet.add((short)i); shortSet.remove((short)i); } System.out.println(shortSet.size()); }

Asset的副作用

我們會使用Asset語句在代碼中做調試使用,在使用的過程中需要注意Asset語句不要對系統的業務邏輯產生副作用,也就是說即使Asset語句不運行,也不會修改代碼的業務邏輯。

看下面的例子:

public void assetWrong(ArrayList<Integer> list){ assert list.remove(0)>0; }

上的代碼我們從list中刪除第一個元素,并判斷刪除的元素是否大于0.

上面的代碼如果assert語句不執行的話,會導致業務邏輯也不執行,所以需要修改成下面這樣:

public void assetRight(ArrayList<Integer> list){ int result=list.remove(0); assert result>0; }

本文的例子:

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

補充知識:Slow HTTP Denial of Service Attack 漏洞解決

解決漏洞需要修改tomcat conf 下 server.xml 文件

<Connector port='8080' protocol='HTTP/1.1' connectionTimeout='2000' redirectPort='8443' URIEncoding='UTF-8'/> connectionTimeout='20'

以上這篇java安全編碼指南之:表達式規則說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲精品精品国产亚洲综合| 水蜜桃精品av一区二区| 国产精品国产一区| 国产精品红桃| 国产亚洲第一伦理第一区| 日韩区欧美区| 88久久精品| 国产精品高清一区二区| 蜜臀久久99精品久久久画质超高清 | 午夜精品福利影院| 亚洲在线成人| 蜜桃视频免费观看一区| 免费观看在线综合| 一区二区电影| 日本综合精品一区| 日韩精品欧美成人高清一区二区| 亚久久调教视频| 亚洲精品九九| 日韩精选在线| 日韩国产欧美三级| 国产精品一区二区精品| 国产精品久久乐| 天堂va在线高清一区| 911精品国产| 欧美激情久久久久久久久久久| 成人在线免费观看网站| 黑人精品一区| 自拍日韩欧美| 日韩欧美高清一区二区三区| 青青在线精品| 久久电影tv| 天堂网在线观看国产精品| 国产精品丝袜xxxxxxx| 三级久久三级久久久| 日本在线视频一区二区| 欧美国产另类| 久久久国产亚洲精品| 国产精品人人爽人人做我的可爱| 亚洲人成高清| 另类小说一区二区三区| 日韩欧美一区二区三区在线观看 | 精品一区欧美| 水野朝阳av一区二区三区| 日韩在线网址| 久草精品视频| 午夜国产精品视频免费体验区| 国产亚洲福利| 欧美视频久久| 中文字幕在线高清| 尹人成人综合网| 日韩高清中文字幕一区| 国产一区二区精品久| 日韩午夜av在线| 欧美亚洲tv| 香蕉成人av| 亚洲1区在线观看| 久久中文字幕一区二区三区| 亚洲高清不卡| 欧美精品国产| 亚洲天堂1区| 亚洲乱亚洲高清| 国产福利一区二区精品秒拍 | 国产成人免费精品| 午夜在线一区二区| 久久这里只有| 日韩在线播放一区二区| 精品99在线| 午夜亚洲福利在线老司机| 久久婷婷国产| 欧美专区在线| 激情视频网站在线播放色| 综合五月婷婷| 日韩中文在线电影| 日韩av中文字幕一区| 成人日韩精品| 国产欧美在线| 性一交一乱一区二区洋洋av| 精品视频99| 亚洲精品视频一二三区| 日韩欧美自拍| 日韩高清一区二区| 九九精品调教| 欧美国产另类| 蜜桃久久久久久| 日韩黄色大片| 国产精品久久亚洲不卡| 久久大逼视频| 欧美13videosex性极品| 国产伦一区二区三区| 午夜精品免费| 国产资源在线观看入口av| 日韩高清电影免费| 亚洲成人免费| 日韩欧美综合| 久久不见久久见中文字幕免费 | 视频一区视频二区中文| 日韩免费福利视频| 欧美激情视频一区二区三区免费| 综合一区二区三区| 黄色日韩精品| 久久国产精品成人免费观看的软件| 国产欧美日韩视频在线| 亚洲在线网站| 亚洲先锋成人| 麻豆理论在线观看| 免费视频一区二区三区在线观看| 亚洲另类视频| 国产农村妇女精品一二区| 日本久久成人网| 91亚洲一区| 老司机精品在线| 国产劲爆久久| 国产麻豆一区二区三区精品视频| 一二三区精品| 首页亚洲欧美制服丝腿| 亚洲女同中文字幕| 欧美中文一区二区| 视频在线不卡免费观看| 欧美国产专区| 国产亚洲一区二区三区不卡| 蜜臀a∨国产成人精品| 欧美日韩少妇| 国产精品7m凸凹视频分类| 99久久精品网站| 日韩免费小视频| 日韩毛片视频| 亚洲一级影院| 亚洲一卡久久| 丝袜a∨在线一区二区三区不卡| 精品在线91| 国产精品日韩| 亚洲精品影视| 日韩黄色免费网站| 国产精品色婷婷在线观看| 久久中文字幕一区二区| 日本精品黄色| 日韩欧美三级| 国产婷婷精品| 日韩不卡免费视频| 国产精品男女| 激情综合五月| 亚洲91精品| 99国产成+人+综合+亚洲欧美| 亚洲一区二区毛片| 在线亚洲观看| 综合日韩在线| 国产日产一区| 日本久久一区| 91亚洲无吗| 久久精品99久久久| 91视频一区| 成人亚洲一区| 欧美少妇精品| 久久狠狠婷婷| 久久精品免视看国产成人| 国产欧美日韩影院| 国产欧美日韩精品一区二区免费 | 亚洲成av在线| 亚洲天堂一区二区| 91精品亚洲| 久久中文字幕二区| 欧美成人综合| 国产精品日韩| 国产精品magnet| 精品资源在线| 日韩伦理在线一区| 999国产精品| 日韩一区精品视频| 亚洲精品美女| 久久精品xxxxx| 美女精品久久| 国产探花在线精品一区二区| www.com.cn成人| 久久在线电影| 天使萌一区二区三区免费观看| 免费欧美在线视频| 日韩av中文在线观看| 麻豆一区二区三区| 激情久久一区二区| 欧美一级精品| 99国产精品私拍| 午夜天堂精品久久久久| 久久国产欧美日韩精品| 国产精品久久久久久模特| 成人精品国产亚洲| 美女毛片一区二区三区四区| 日韩精品水蜜桃| 国产精品丝袜xxxxxxx| 视频一区日韩精品| 少妇久久久久| 在线一区二区三区视频| 久久国产尿小便嘘嘘| 国产乱码午夜在线视频| 亚洲ww精品| 国产福利电影在线播放| 亚洲女同一区| 日本在线视频一区二区| 久久久精品日韩| 亚洲深夜福利在线观看| 国产精品777777在线播放|