JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set ...

文章推薦指數: 80 %
投票人數:10人

JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法_overloading方法 · 1.Return Type · 2.Name of the method · 3.Number of ... 跳到主要內容 JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法_overloading方法 取得連結 Facebook Twitter Pinterest 以電子郵件傳送 其他應用程式 - 1月09,2018 JAVA物件導向 一個 車子物件 我們可能會定義如下屬性 make  :廠牌(英文用語) model  :車款(英文用語) Miles  :哩程數 Year   :出廠年 UML(UnifiedModelingLanguage) 建構子/get..set... Car類別 程式有時候很長是因為 getXXX ,setXXX這兩個公開接口方法一直出現的關係 這類型程式設計寫法有點類似 C#中的 getset存取器觀念 防止外面的一些語法操作 對我們的class內部做些不正當操作 對內部宣告變數進行封裝不讓外部直接進行存取 若getXXX,setXXX成對出現則代表前人當時設計時主要認為該變數應該可讀可寫 則說明外部有些地方正在被調用使用中 若只有getXXX method的時候 則代表供唯讀而已 當有需要擴充時候才去擴充setXXX 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; /** * *@authorchous */ publicclassCar{ privateString_make; privateString_model; privateint_year; privatedouble_miles; /** *AnewCarwithNoParameters */ publicCar() { } /** *AnewCarwithParameters *@parammakethemake *@parammodelthemodel *@paramyeartheyear *@parammilesthemiles */ publicCar(Stringmake,Stringmodel,doublemiles,intyear) { this._make=make; this._model=model; this._miles=miles; this._year=year; } publicStringgetMake(){ returnthis._make; } publicvoidsetMake(Stringvalue){ this._make=value; } publicStringgetModel(){ returnthis._model; } publicvoidsetModel(Stringvalue){ this._model=value; } publicdoublegetMiles(){ returnthis._miles; } publicvoidsetMiles(doublevalue){ this._miles=value; } publicintgetYear(){ returnthis._year; } publicvoidsetYear(intvalue){ this._year=value; } } 主程式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; importjava.util.Scanner; /** * *@authorchous */ publicclassDriver{ /** *@paramargsthecommandlinearguments */ publicstaticvoidmain(String[]args){ //TODOcodeapplicationlogichere System.out.println("We'recreatinganewcar:"); Scannerin=newScanner(System.in); CaruserCar=newCar(); System.out.println("Whatisthemakeofthecar?"); userCar.setMake(in.nextLine()); System.out.println("Whatisthemodelofthecar?"); userCar.setModel(in.nextLine()); System.out.println("Whatisthemilesofthecar?"); userCar.setMiles(Double.parseDouble(in.nextLine())); System.out.println("Whatistheyearofthecar?"); userCar.setYear(Integer.parseInt(in.nextLine())); //usingObjectasourbase-->toString(); //System.out.println(userCar); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar.getMake() ,userCar.getModel() ,userCar.getMiles() ,userCar.getYear()); CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar2.getMake() ,userCar2.getModel() ,userCar2.getMiles() ,userCar2.getYear()); } } 輸出之測試結果 可自行輸入 也可於建構子多載後續有參數去做設數值 在介紹完兩種OO的參數賦予數值 以及 輸出打印之後 你可能會想覺得這樣子的指派各個數值去進行呈現的模式有點麻煩 所以想直接針對整個物件實體做內容輸出 因此而嘗試了直接指派物件給print 這麼輸出會有捨麼效果 這裡我們可以看到在使用第一種一個一個輸入帶入數值 輸出之後會產生一串奇怪類似亂碼的結果 你可能會問為捨麼會輸出這種亂碼 System.out的println()之相關打印方法 如果直接給它一個物件作為參數,預設則會自動呼叫該物件的toString()方法 其實主要是因為 來自於繼承到的Bas類別Object當中 toString 預設回傳物件之格式 官方網站檔案 https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString() (PS:Object類別是Java程式中所有類別的父類別, JAVA中所有物件都隱含的擴充了java.lang.Object類別) Object中定義了許多個方法 像是: 公開的(public) equals()、toString()、hashCode()、getClass()、wait()、notify()、notifyAll() 這些在一些開發上有些時機可以讓開發者去進行覆寫進行功能擴充 所以原因在於我們未去implement toString的方法 所以它預設回傳一組唯一的hashcode給我們,藉此我們可以去透過override去改寫此方法。

在現行你我所創建出來的這個Car物件當中 表面上看似未有任何繼承的細節 其實它已經有預先直接繼承JAVA ObjectClass的血統 在NetBeansIDE中 開發者可使用CTRL按鍵 按著不放去點選特定 結構類別查看一些關聯 Override(覆寫) 你可以想做去覆蓋之前的結構、去重新改寫某一個舊有的一段程式(方法...) 來自於繼承的父類或是基底類(BaseClass) Whatweneedtodoisbeabletosupersedeourbaseclassmethods 如何去override官方網站上原先繼承自ObjectBase類中的toString方法呢?? Step1.複製官方網站上的這個語句 貼至Car類別之中, 並附上該有對應意義之Annotation(註釋文)->通常可以用來描述該方法是有捨麼含意用途 你也可以用/**Enter 去寫一些MethodSignature -->parameter定義註解 PS:一個完整的MethodSignature會包含 1.ReturnType 2.Nameofthemethod 3.NumberofParameters/TypeofParametersinorder 那回去我們的Driver主程式區域看一下這樣做的好處(節省Code) 那我們不想要每次一有一個Car物件 new出來然後要輸出打印裡面對應特性資訊 就一直寫這一段 ㄌㄡˋㄌㄡˋㄉㄥˊ~~ 的程式碼 所以就包在這裡做 經過改寫後 未來我們就只需要call此方法獲得回傳之String結果 就能節省打一長串printf的內容 捨麼意思??? 在改造之前的主程式寫法 改造之前的程式碼 :  要寫很多重複難維護,容易寫錯對應實體屬性打印 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; importjava.util.Scanner; /** * *@authorchous */ publicclassDriver{ /** *@paramargsthecommandlinearguments */ publicstaticvoidmain(String[]args){ //TODOcodeapplicationlogichere CaruserCar1=newCar("Toyota","vios",3452.8,2010); CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013); CaruserCar3=newCar("Toyota","Yaris",3244.5,2012); CaruserCar4=newCar("honda","CITY",3242.5,2015); CaruserCar5=newCar("honda","HR-V",3248.5,2015); //usingObjectasourbase-->toString(); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar1.getMake() ,userCar1.getModel() ,userCar1.getMiles() ,userCar1.getYear()); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar2.getMake() ,userCar2.getModel() ,userCar2.getMiles() ,userCar2.getYear()); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar3.getMake() ,userCar3.getModel() ,userCar3.getMiles() ,userCar3.getYear()); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar4.getMake() ,userCar4.getModel() ,userCar4.getMiles() ,userCar4.getYear()); System.out.printf("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\n" ,userCar5.getMake() ,userCar5.getModel() ,userCar5.getMiles() ,userCar5.getYear()); } } 改造之後(Override了toString方法)優化寫法 只需要一行就能獲得所有屬性資訊且格式都只需定義一次 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; importjava.util.Scanner; /** * *@authorchous */ publicclassDriver{ /** *@paramargsthecommandlinearguments */ publicstaticvoidmain(String[]args){ //TODOcodeapplicationlogichere CaruserCar1=newCar("Toyota","vios",3452.8,2010); System.out.println(userCar1); CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013); System.out.println(userCar2); CaruserCar3=newCar("Toyota","Yaris",3244.5,2012); System.out.println(userCar3); CaruserCar4=newCar("honda","CITY",3242.5,2015); System.out.println(userCar4); CaruserCar5=newCar("honda","HR-V",3248.5,2015); System.out.println(userCar5); } } 有沒有感覺到 Override的強大力量 講到Override(覆寫) 一定會有人把它跟 overloading搞混 那 overloading(多載) 又是捨麼??? Overloading(多載) overloading 從外觀表面語法 就是相同method名稱 但有不同參數不同回傳型態的多重定義 可能同樣一種方法是 加總的叫做Sum 可是又可能分成回傳型態不同,傳入參數可能針對兩個或三個甚至多個加總的差異 intSum(intnum1,intnum2) intSum(intnum1,intnum2,intnum3) doubleSum(doublenum1,doublenum2) doubleSum(doublenum1,doublenum2) 以剛剛我們建立的Car 建構子來看 一個車子我們還會想看他的時速(speedperhour) 甚至希望能去修改車子之加速(我們會去採油門改增加的速度) 增加油門改加速機制的相關方法及屬性、屬性相應存取方法 建構子擴充定義 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; /** * *@authorchous */ publicclassCar{ privateString_make; privateString_model; privateint_year; privatedouble_miles; privatedouble_speed; /** *AnewCarwithNoParameters */ publicCar(){ } publicCar(Stringmake,Stringmodel,doublemiles,intyear){ this._make=make; this._model=model; this._miles=miles; this._year=year; this._speed=0; } /** *AnewCarwithParameters *@parammakethemake *@parammodelthemodel *@paramyeartheyear *@parammilesthemiles *@paramspeedthespeedperhour */ publicCar(Stringmake,Stringmodel,doublemiles,intyear,doublespeed){ this._make=make; this._model=model; this._miles=miles; this._year=year; this._speed=speed; } publicStringgetMake(){ returnthis._make; } publicvoidsetMake(Stringvalue){ this._make=value; } publicStringgetModel(){ returnthis._model; } publicvoidsetModel(Stringvalue){ this._model=value; } publicdoublegetMiles(){ returnthis._miles; } publicvoidsetMiles(doublevalue){ this._miles=value; } publicintgetYear(){ returnthis._year; } publicvoidsetYear(intvalue){ this._year=value; } publicdoublegetSpeed(){ returnthis._speed; } publicvoidsetSpeed(doublevalue){ this._speed=value; } /** *OverridesBasetoString()onObject. * *@returnthestringrepresentationoftheobject. */ @Override publicStringtoString(){ returnString.format("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\t" +"Speed:%.2fMilesPerHour\n" ,this.getMake() ,this.getModel() ,this.getMiles() ,this.getYear() ,this.getSpeed()); } /** *defaultIncrementby10 *@return */ publicbooleanaccellerate() { _speed+=10; returntrue; } /** * *@paramnumMPHMilesperhour *@return */ publicbooleanaccellerate(intnumMPH) { _speed+=numMPH; returntrue; } publicdoubleaccellerateGetSpeed() { _speed+=10; returnthis.getSpeed(); } publicdoubleaccellerateGetSpeed(intnumMPH) { _speed+=numMPH; returnthis.getSpeed(); } } 建構子 多載   -->  車子空車位 有車子停進來未發動 有車子停進來已發動(有初速) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 publicCar(){ } publicCar(Stringmake,Stringmodel,doublemiles,intyear){ this._make=make; this._model=model; this._miles=miles; this._year=year; this._speed=0; } /** *AnewCarwithParameters *@parammakethemake *@parammodelthemodel *@paramyeartheyear *@parammilesthemiles *@paramspeedthespeedperhour */ publicCar(Stringmake,Stringmodel,doublemiles,intyear,doublespeed){ this._make=make; this._model=model; this._miles=miles; this._year=year; this._speed=speed; } 返回數值型態Boolean之是否已加速方法多載 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /** *defaultIncrementby10 *@return */ publicbooleanaccellerate() { _speed+=10; returntrue; } /** * *@paramnumMPHMilesperhour *@return */ publicbooleanaccellerate(intnumMPH) { _speed+=numMPH; returntrue; } 預設加速區段 設置為10 那又多增設 擴充給我們自己設置加速區間的overloading方法 可以讓我們多填充參數設置自己想要油門踩加速度為多少 調用  userCar1.accellerate(35); 速度累加上去後結果 返回數值型態double  之獲取再加速某速之後去度區段方法 多載 1 2 3 4 5 6 7 8 9 10 publicdoubleaccellerateGetSpeed() { _speed+=10; returnthis.getSpeed(); } publicdoubleaccellerateGetSpeed(intnumMPH) { _speed+=numMPH; returnthis.getSpeed(); } 現行Code 主程式部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; importjava.util.Scanner; /** * *@authorchous */ publicclassDriver{ /** *@paramargsthecommandlinearguments */ publicstaticvoidmain(String[]args){ //TODOcodeapplicationlogichere CaruserCar1=newCar("Toyota","vios",3452.8,2010); System.out.println("一台車剛初始化未發動狀態特性:"); System.out.println(userCar1); System.out.println("一台車發動後調成空檔預設加速往前速度特性:"); userCar1.accellerate(); System.out.println(userCar1); System.out.println("一台車發動後調成空檔後又踩了油門加速了35m速度特性:"); userCar1.accellerate(35); System.out.println(userCar1); System.out.println("第二台車剛發動且以15mph初速出發"); CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013,15); System.out.println(userCar2); booleanisSuccess=userCar2.accellerate();//default+10 System.out.println("是否已經成功發動:"+isSuccess+"當前車速為:"+userCar2.getSpeed()); doublecurrentSpeedOfCar2=userCar2.accellerateGetSpeed(20); System.out.println("再多加速20mph之後的車速:"+currentSpeedOfCar2); //CaruserCar2=newCar("NISSAN","TIDA",3244.5,2013); //System.out.println(userCar2); //CaruserCar3=newCar("Toyota","Yaris",3244.5,2012,45); //System.out.println(userCar3); //CaruserCar4=newCar("honda","CITY",3242.5,2015,50); //System.out.println(userCar4); } } Car類別部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 /* *Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties. *Tochangethistemplatefile,chooseTools|Templates *andopenthetemplateintheeditor. */ packageobjectclasses; /** * *@authorchous */ publicclassCar{ privateString_make; privateString_model; privateint_year; privatedouble_miles; privatedouble_speed; /** *AnewCarwithNoParameters */ publicCar(){ } publicCar(Stringmake,Stringmodel,doublemiles,intyear){ this._make=make; this._model=model; this._miles=miles; this._year=year; this._speed=0; } /** *AnewCarwithParameters *@parammakethemake *@parammodelthemodel *@paramyeartheyear *@parammilesthemiles *@paramspeedthespeedperhour */ publicCar(Stringmake,Stringmodel,doublemiles,intyear,doublespeed){ this._make=make; this._model=model; this._miles=miles; this._year=year; this._speed=speed; } publicStringgetMake(){ returnthis._make; } publicvoidsetMake(Stringvalue){ this._make=value; } publicStringgetModel(){ returnthis._model; } publicvoidsetModel(Stringvalue){ this._model=value; } publicdoublegetMiles(){ returnthis._miles; } publicvoidsetMiles(doublevalue){ this._miles=value; } publicintgetYear(){ returnthis._year; } publicvoidsetYear(intvalue){ this._year=value; } publicdoublegetSpeed(){ returnthis._speed; } publicvoidsetSpeed(doublevalue){ this._speed=value; } /** *OverridesBasetoString()onObject. * *@returnthestringrepresentationoftheobject. */ @Override publicStringtoString(){ returnString.format("Make:%s\tModel:%s\tMiles:%.1f\tYear:%d\t" +"Speed:%.2fMilesPerHour\n" ,this.getMake() ,this.getModel() ,this.getMiles() ,this.getYear() ,this.getSpeed()); } /** *defaultIncrementby10 *@return */ publicbooleanaccellerate() { _speed+=10; returntrue; } /** * *@paramnumMPHMilesperhour *@return */ publicbooleanaccellerate(intnumMPH) { _speed+=numMPH; returntrue; } publicdoubleaccellerateGetSpeed() { _speed+=10; returnthis.getSpeed(); } publicdoubleaccellerateGetSpeed(intnumMPH) { _speed+=numMPH; returnthis.getSpeed(); } } JAVA學習 取得連結 Facebook Twitter Pinterest 以電子郵件傳送 其他應用程式 留言 這個網誌中的熱門文章 經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.CrossSiteScripting(XSS)_StoredXSS_ReflectedXSSAllClients - 3月10,2021  近期新加入的功能code剛好也被CheckMarx掃出高風險部分的程式碼漏洞我也踏到這個Issue啦CrossSiteScripting(XSS) 第一種.StoredXSS高風險CheckMarx掃碼報告給的說明[StoredXSS]============================================================風險:攻擊者可以利用合法存取應用程式提交資料到資料庫。

當另一個使用者隨後存取該資料,網頁可能會被改寫且惡意腳本可能會被啟動。

發生原因:從資料庫中的資料建立網頁。

資料直接嵌入至HTML的頁面,利用瀏覽器顯示。

資料可能源自於其他使用者的輸入。

如果資料包含HTML片段或Javascript,使用者無法分辨是否為預期的頁面。

該漏洞主因為未先對嵌入資料庫中的資料進行編碼(Encode)來預防瀏覽器將其當為HTML的格式而非純文字。

如何避免:1.驗證所有資料,無論其來源為何。

驗證應基於白名單:僅接受預定結構的資訊,而不是拒絕不良的樣式(Patterns)。

 應確認: ●資料型態 ●大小 ●範圍 ●格式 ●期望值 2.驗證無法取代編碼.輸出嵌入之前,不論其來源,將所有動態資料進行編碼.編碼方式應該是上下文相關的.例如:●HTML內容使用HTML的編碼方式 ●HTML編碼特性是將資料輸出到特性的值●JavaScript的編碼方式為伺服器產生的Javascript 3.考慮使用ESAPI的編碼庫,或它的內置功能。

對於舊版的ASP.NET,請考慮使用AntiXSS. 4.在HTTP類型對應的表頭,明確定義整個頁面的字元編碼. 5.設置httpOnly標誌於會期資訊,以防止利用XSS來竊取資訊.============================================================這裡報告描述是指我對傳進來字串參數直接拋給DAL處裡的類別執行查詢這裡缺乏對輸入進來的字串參數做一些查檢判斷也建議在帶入時對參數也做一些htmlencode處理這裡用AntiXSS來Encode第二種.ReflectedXSSAllClients高風險CheckMarx掃碼報告給的說明[Reflecte 閱讀完整內容 ASP.NETWebService(二)_三種存取方式介紹_webmethod屬性大致介紹 - 10月25,2020 很久以前曾整理過一篇xmlwebservice部落格文章https://coolmandiary.blogspot.com/2017/11/web-service.html 可以得知用於應用程式整合、B2B整合和跨防火牆的通訊如今因為又看到其他文章跟在實際專案中再次見面因此想再加深補充實務上的經驗分享當筆記在此之前先溫顧一下在.NETWebService中共分為三種存取途徑1.EndPoint(SOAP):也就是比較常在市面上基礎教授書籍中講的URIlocation 會直接條列出webservice所包含的一系列方法及方法描述、Class描述是XMLbased的messagetemplate,是Browser跟WebService之間溝通收發的橋樑。

實際案例:http://www.webxml.com.cn/WebServices/WeatherWS.asmx2.Disco(WebServiceDiscovery):用於指向web服務位置Disco的用途就像電話簿和搜尋引擎網站一樣,提供資訊分類以及尋找的服務,讓我們能方便迅速找到所需的WebServices。

其運作原理是,當開發人員將一個WebService設計完成之後,可以將它登錄到一個集中的地方,其他人就可以向這個集中地查詢找到需要的服務。

這個登錄-查詢的機制只要就是依靠UDDI(UniversalDescription,DiscoveryandIntegration)來達成。

(備註:在不知道哪裡有你需要的WebServices情境下起到作用。

)實際案例:http://www.webxml.com.cn/WebServices/WeatherWS.asmx?disco3.WSDL(WebServicesDescriptionLanguage):用於描述webservice服務定義的方法、屬性、Binding的協定、Port、URI當在網路上找到一個WebService,如何知道怎樣使用?有哪些服務、方法可以呼叫?要傳遞對應哪些參數?(備註:是在你已經確定要使用某個WebService並且知道其網址的情形下才有用)實際案例:http://www.webxml.com.cn/WebServices/Wea 閱讀完整內容 經得起原始碼資安弱點掃描的程式設計習慣培養(五)_MissingHSTSHeader - 6月27,2021  接續前幾篇系列經得起原始碼資安弱點掃描的程式設計習慣培養(一)_OWASPTop10(十大網站安全風險)_學習寫更安全程式碼的網站推薦經得起原始碼資安弱點掃描的程式設計習慣培養(二)_8.InsecureDeserialization:不安全的反序列化漏洞ASP.NET處理方式經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.CrossSiteScripting(XSS)_StoredXSS_ReflectedXSSAllClients經得起原始碼資安弱點掃描的程式設計習慣培養(四)_1.Injection注入攻擊_SQLInjection)_orderby語句正確參數化套入最近又遇到被若安掃描到高風險要修正的程式碼啦....一看這還真是搞不懂該怎麼修呢HSTS(HTTPStrictTransportSecurity) 主要是一份國際標準規格(RFC6797)的網際網路瀏覽安全機制,用於宣告瀏覽器與伺服器之間通訊方式必須強制採用TLS/SSL加密通道。

只要從伺服器端送出一個Strict-Transport-Security標頭(Header)給瀏覽器,即可告知瀏覽器於未來的某段時間內一律使用SSL來和該網站連接(設定可涵蓋所有子域名網站),一旦發生憑證失效情況,使用者將無法再瀏覽該網站,如此一來便可大幅減少中間人攻擊的問題發生。

再更白話一點HSTSHeader就是負責將http強制轉為httpsCheckMarx掃碼報告給的說明============================================================風險:如果webconfig沒有設置HSTS表頭、"max-age"(有效期)不足一年,或沒有設定"includeSubDomains"(包含所有子網域),可能會使用戶容易遭受中間人攻擊。

發生原因:許多使用者只要在瀏覽器的網址列輸入網域名稱(DomainName)即可瀏覽網站,並沒有輸入協定(Protocol)的名稱。

瀏覽器會自動假設使用者使用的是HTTP協定而不是有加密機制的HTTPS協定。

在第一次發出前往特定網站的請求時,攻擊者可以執行中間人攻擊並將用戶轉址到 閱讀完整內容 Samuel 瀏覽簡介 封存 2022 29 三月 2 二月 8 一月 19 2021 235 十二月 21 十一月 15 十月 27 九月 29 八月 44 七月 26 六月 13 五月 9 四月 10 三月 13 二月 13 一月 15 2020 97 十二月 4 十一月 26 十月 10 九月 23 八月 4 七月 9 六月 1 五月 5 四月 3 三月 6 一月 6 2019 18 六月 1 五月 1 四月 6 三月 2 一月 8 2018 43 十二月 1 十一月 2 九月 1 八月 1 七月 5 六月 2 五月 2 四月 5 三月 8 二月 7 一月 9 系統重構(一系列等量變換)_技法1.抽取方法(ExtractMethod)_技法2.抽取類別(Ex... LinuxShell腳本_學習筆記2_自定義變數_環境變數_變數賦值_單引號雙引號差別 LinuxShell腳本_學習筆記1_自動化運維基石_寫第一支Shell腳本程式 JAVA程式語法_物件導向Part2_static關鍵字使用之便利_final關鍵字使用 JAVA程式語法_ArrayList簡單錯誤用法及常發生錯誤介紹_GenericTypes泛型_D... JAVA程式語法_數學運算 JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法... 英文用語分享Part1 C++_STL筆記1 2017 145 十一月 9 十月 4 九月 8 八月 3 七月 9 六月 14 五月 25 四月 30 三月 26 二月 9 一月 8 2016 196 十二月 2 十一月 13 十月 9 九月 27 八月 19 七月 14 六月 19 五月 20 四月 9 三月 17 二月 22 一月 25 顯示更多 顯示較少 分類 C#54 MSSQL38 .NETCore36 asp.net36 opencv2411_3.0開發筆記35 T-SQL34 .NETCoreWebAPI26 ASP.NETMVC23 iOS21 python21 JAVA學習20 Kinectv2開發特訓18 VueJS16 EmguCV_開發15 Checkmarx14 程式原始碼資安弱點掃瞄14 Node.JS13 Unity學習13 疑難排解13 Javascript11 Oracle11 jQuery11 嵌入式媒體11 C#WindowsForm10 openFrameworks10 樹梅派10 Azure9 CleanCode9 HTML5_Javascript_CSS9 PHP9 win10安全9 Azure雲端應用開發8 RDLC報表8 ReactJs8 VB.NET8 前端五四三8 深入淺出C#8 ASP.NETWepAPI7 Angular7 C++7 CrystalReport報表開發7 小技巧收集7 ECCouncilCASE.NET6 JAVA6 XML6 圖學影像演算法研讀6 理財學習6 設計模式6 Dlib5 LeetCode5 MAYA學習小筆記5 SignalR5 WPF5 版本控制教學5 物件導向程式設計5 資料探勘weka5 .Net54 Blazor4 DigitalOcean4 DomainKnow-How4 Redis4 Swift4 多益4 小技能儲備4 汽車駕訓筆記4 產業替代役工作心得4 領域知識4 AJAX3 ArchitectureDeisignPattern3 Docker3 ECCouncilCASE3 Eclipse技巧3 EntityFrameworkCore3 HTCVive開發學習3 IIS配置3 J2EE3 Qt3 WebService3 WordPress_冬季特訓3 cisco_CCNA學習3 opencv之魂3 pycharm3 unittest3 原始碼掃描工具3 單元測試3 學長我不會這個要怎麼做系列3 心情3 演算法3 視窗程設_冬季特訓3 電商維護案3 .Net開發技巧工具2 ADO.NET2 AForge.NET2 Accord.Net2 BlazorServer2 Codility2 DevExpress2 EntityFramework2 LinuxShell2 Linux作業系統2 MVC架構設計2 Processing2 RestSharp2 SMS2 TFS2 VMware2 bootstrap2 bootstrap42 git2 jQueryUI2 openGL2 opencv3.22 opencv_on_WPF2 phpMyAdmin資料庫語法2 前端套件推薦使用2 學習技術迷思探討2 有效資訊的傳播2 科技時事2 網頁應用開發工作常用的技巧2 靈感參考2 A-Frame1 AI1 ASP1 AWS物聯網1 AccessibilityinWebDevelopment1 Access資料庫1 AndroidStudio1 AngularMaterial1 Aspose1 Aspose.Words1 AzureDevOps1 BlazorWebAssembly1 Blender1 C1 CIM工程師工作所學1 Cocoapods1 CustomServerControl1 DI1 Delphi1 DependencyInjection1 DevOps1 ECCouncil1 EIT架構思想1 ES61 Express1 FireBase1 GCP教學1 Gimp1 GoDaddy1 HTTPS1 HtmlAgilityPack1 MFC1 MFC_opencv1 MIS程式設計師之魂1 MVP架構設計1 MongoDB1 NPOI1 Natron1 NetBeans使用1 Octane1 PdfSharp1 PowerBI1 RWD1 RedHat_51 SILOpenFontLicense1 SQLite1 SQL查詢效能提升1 SQL查詢效能調校1 SideProject1 SublineText編輯器使用1 TOADForOracle1 Typescript1 UI一致性1 V8引擎1 VB.NET網路程式設計1 WebVR1 WindowsServer1 Xamarin手機應用開發1 Xcode1 angularJS1 axios1 certbot1 colorbox1 css1 html1 iTextSharp1 json.net1 libsvm1 opendata1 parser1 postman1 visualstudio1 webmethod1 不同系統下的操作經驗1 作品集(2013至2015)1 個人職涯規劃1 公文寫作1 區塊鍊1 半導體產業知識1 反編譯1 同事相處1 商談應對1 外包案子接案1 安全性程式設計1 家教技術顧問課程紀錄1 密碼學1 實用生活科技1 影像處理1 快速配置1 文章心得1 日語1 機器學習1 正規表達式1 泛型處裡函式1 無障礙網頁設計調整1 產業新聞1 相依性注入1 私房菜單料理1 程式碼重構原理1 程式設計概要特訓1 程式語言Note1 系統重構1 統計1 網路安全1 網頁爬蟲1 美劇英文1 職場達人秀1 英文用語1 英文電影1 資料結構1 軟體開發概論學習1 遠程目標1 開發套件插件列1 離散數學筆記1 顯示更多 顯示較少 總瀏覽人數 BloggerAds



請為這篇文章評分?