跳到主要內容

發表文章

目前顯示的是 2018的文章

[網路安全]SSRF

SSRF: Server Side Request Forgery 服務端請求偽造。 攻擊者構造形成看似由服務器發起請求的一個安全漏洞。基本上,SSRF的目標是外網無法Access的內部系統。 SSRF如何產生? SSRF形成原因大多是server side從其他server應用獲取data時沒有對於目標位址做過濾跟限制。 比如說從指定的URL獲取了response,像是內容、圖片、下載等等。 當一個可以接受URL的API沒有對URL進行過濾時,那麼駭客可以利用URL的response去探測內網。 SSRF的出現情境 1. 社交分享功能: 獲取超連結的標題與內容並進行顯示。 2. 轉碼服務: 通過URL地址把原地址的網頁內容調優使它適合手機閱覽(內容重新矲版整理) 3. 網頁翻譯: 將網址的網頁內容做文字翻譯 4. 圖片加載/下載: 通過URL在網頁的文本編輯器裡面顯示圖片或下載圖片 5. 圖片/文章收藏功能: 和1的情境差不多 6. 雲端服務: 雲端server可以由遠端執行命令來判斷網站是否存活,如果可以捕獲相應的訊息,就可以進行SSRF 7. 網站採集: 有些網站會對你輸入的URL進行一些訊息採集的工作 8. Database的內置功能: database中像是copy database的function 9. Mail System: 比如接收郵件服務器的位址 10 從遠端伺服器請求資源 SSRF的應對之道 1. 過濾response訊息:如果API要獲取某一種類型的訊息,再獲取response時需要先去過濾它是否符合標準。 2. 統一錯誤訊息 3. 設置URL白名單或是gethostbyname()判斷是否為內網IP 4. 限制請求的端口(Port),如限制為80, 443, 8080, 8090 5. 禁止跳轉 6. 進用不需要的協議(僅允許http和https請求)

[網路安全]XSS

XSS, Cross-site scripting. 在於未充分檢查使用者輸入的訊息,導致使用者有機會去使用scripting language在server執行程式碼,程式撰寫者必須去檢查使用者的資料格式來避免這個問題。 XSS通常會發生在 1. 使用者的http request未檢查 2. 在web application動態產生網頁時,可能會包含未被檢查的內容 3. 在產生網頁時,並沒有方式讓網頁內容不去執行scripting 4. user在瀏覽 gen出來的網頁時成了內含惡意script的犧牲者 Type 1: Reflected XSS (or Non-Persistent) 就是在http request裡面加入惡意的執行指令,然後在web server回應到使用者的browser執行。 Type 2: Stored XSS (or Persistent) 如果Web Server意外把含有惡意的執行指令碼存在server的storage中,然後在使用者使用服務時,藉機在執行指令以獲得一些敏感的隱私資料。 Type 0: DOM-Based XSS DOM-Based XSS 就是指網頁上的 JavaScript 在執行過程中,沒有詳細檢查資料使得操作 DOM 的過程代入了惡意指令。 應對之道:  1. 檢查任何使用者或是Web application所承接近來的input,並檢查裡面有沒有埋藏指令碼。 2. 記得輸出到使用者的response需要經過OWASP的Encoder處理,來避免裡面有駭客埋藏的指令碼。 針對Java的處理Encoder, OWASP的資源提供如下 http://owasp.github.io/owasp-java-encoder/encoder/index.html

[Java]序列化與反序列化

物件序列化 簡單來說就是將 物件 變成資料流,可以將物件儲存成 檔案 ,可以永久儲存在硬碟中,而且可以在2台電腦之間傳遞物件,是非常實用的功能。 物件反序列化 就是將 檔案 還原成 物件 ,並拿來使用。 重點  : 要被虛列化的物件必須加入Serializable介面,如果該類別也使用到其他類別的物件,那麼其他類別也必須使用Serializable介面,否則執行時期會發生錯誤。 Source:  http://lolikitty.pixnet.net/blog/post/36759934-java-%E5%BA%8F%E5%88%97%E5%8C%96-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96-%28serialization-deserialization%29

[數學基礎]排列組合

問題分類 袋中有10個球,每個球都標了號碼,從1號標到10號,現在從袋子中抽出3個球,抽出後不得在放回袋子中。 排列問題: 把球上的數字,按照抽出的順序記下,也就是(1 2 3)以及(3 2 1)代表不同樣的事件 組合問題: 把球上的數字記下,但毋須理會球被抽出的先後順序,也就是(1 2 3)以及(3 2 1)代表同樣一件事 組合(Combination): 定義:如果有n個不同物體,取出m個(先後順序不同,但內容一樣,則視為相同) 組合方式: 記做  n C m (因為html打不出正確的格式,先以此方式表示,否則正確的格是應該是n和m會在C的右側,一上一下) 公式: (n*(n-1)*(n-2)*......(n-m+1))/(m*(m-1)*....2*1),可以記做(n!) / (m!(n-m)!) 這個公式的意義在哪邊? 是怎麼推導過來的? 這要從排列定義的著手。 排列(Permutation) 定義:如果有n個不同物體,取出m個(先後順序不同視為不同) 排列方式: 記做  n P m (因為html打不出正確的格式,先以此方式表示,否則正確的格是應該是n和m會在P的右側,一上一下) 公式: n*(n-1)*(n-2)*......(n-m+1),這個意義在於,第一抽有n個可能,第二抽有n-1個可能,第m抽有(n-m+1)種可能。可以記做 n! / (n-m)! 從排列到組合(Permutation to Combination) 從定義來看,排列為從n個中挑出m個後的可能結果後,再乘這m個前後順序不同的所有可能結果,也就是如果10顆球,如果挑出(1 2 3),則這(1 2 3)的先後次序有3 * 2 * 1 = 6種可能結果 寫成數學表達,則是 n P m  =  n C m  *  m P m    由這個等式就可以導出  n C m  = (n!) / (m!(n-m)!) 結語: 理解排列組合的概念,有助於之後關於二項式展開以及數學常數e的定義推導,也是微積分和統計的基石之一。

[學習筆記]Tomcat加入Windows Service

先在command shell使用sc命令 加入服務:sc create ServiceName binPath= 路徑 start= auto(等號後面的空格必須) 刪除服務:sc delete ServiceName e.g 將Tomcat加入到系統服務中: sc create Tomcat binPath= F:\apache-tomcat\bin\startup.bat start= auto 將Tomcat服務刪除: sc delete Tomcat 將tomcat加入系統服務裡面 一、將Tomcat註冊到服務裡面 1,在dos下進入tomcat\bin目錄 2,在命令列輸入service install [服務名,預設Tomcat5] 3,要啟動該服務,輸入:net start 服務名 二、修改、刪除服務 語法:sc create | delete | config 服務名 [參數] 主要參數清單:   start= demand|boot|system|auto|disabled|delayed-auto  //啟動類型   binPath= BinaryPathName                //可執行檔路徑   depend= 依存關係(以 / (斜杠) 分隔)   DisplayName= <顯示名稱>                //螢幕顯示名稱 作用依次是:新建、移除、重佈建服務。 例如:重新佈建服務mysql的執行路徑的方法是: sc config mysql binPath= "新路徑" 參考:   http://fecbob.pixnet.net/blog/post/38258335-tomcat%E5%8A%A0%E5%85%A5%E5%88%B0%E7%B3%BB%E7%B5%B1%E6%9C%8D%E5%8B%99%E4%B8%AD

[疑難雜症]Eclipse 匯入Maven Web專案出現錯誤“Dynamic Web Module 3.1 requires Java 1.7 or newer”

問題現象 maven project的Web專案出現了錯誤"Dynamic Web Module 3.1 requires Java 1.7 or newer" 問題解決 在pom.xml裡面的<build>tag間加上     <plugins>       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-compiler-plugin</artifactId>         <version>3.1</version><!-- Servlet 3.1-->         <configuration>           <source>1.8</source><!-- source compile Java version -->           <target>1.8</target><!-- target compile Java version -->         </configuration>       </plugin>     </plugins> 之後在專案上面按右鍵 Maven-> Update Project....來更新專案,錯誤就會消失了。

Log4j2在web application的使用

使用環境: JDK8 Tomcat 9.1 使用log4j2版本: V2.11.1 Maven dependency <dependencies> <dependency> <groupId> org.apache.logging.log4j </groupId> <artifactId> log4j-api </artifactId> <version> 2.11.1 </version> </dependency> <dependency> <groupId> org.apache.logging.log4j </groupId> <artifactId> log4j-core </artifactId> <version> 2.11.1 </version> </dependency> </dependencies> Configuration log4j在web application可以使用log4jConfiguration這個context parameter. 另外log4j會去搜尋 1. servlet的context resource,像是web application的root dir,名稱為logging.xml(要有define context resource的location) 2. 如果沒有定義location,log4j會去搜尋WEB-INF這個folder以log4j2的名稱開頭的檔案 3. 一般的搜尋方式是會去class path找,也就是在src的resource目錄放的話,會在target的class path出現。 開始於結束 log4j2會在web application佈署時開始,而在回收時結束。 設定檔範例: <?xml version="1.0" encoding="utf-8"?> &

[Example]Header content

accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */* referer: http://localhost:8080/ServletPractice/Login.html accept-language: zh-TW content-type: application/x-www-form-urlencoded ua-cpu: AMD64 accept-encoding: gzip, deflate user-agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko host: localhost:8080 content-length: 28 connection: Keep-Alive cache-control: no-cache

[讀書摘要]大腦喜歡這樣學(A mind for Numbers)

為大腦暖機:     在精讀書本的內文前,先快速看一看圖片、表格、或是書章節後的一些練習問題之後,在對書本的內文進行閱讀。 學習與大腦的關係 1. 大腦的兩種學習模式:     專注模式(Focus mode)與發散模式(Diffuse Mode)。人類的大腦就是在這兩種模式中反覆切換去運行。     專注模式是針對一件是深入且循序漸進的方式去思考與處理問題,發散模式則是讓思緒遨遊在大腦不同區域間;從自然的演化來看,這兩個模式分別針對了"進食"以及"警戒掠食性的危險動物"而來,這兩種模式無法同時運行,而需要切換來應付各種不同的情境。     對於數理學習的方面,由於人類的演化,大腦還無法有效去處理抽象化的概念,而定勢效應(Einstellung Effect 跳脫不出一開始就錯誤的方向或是想法)更加深了這一層學習的困難度。因此,對於數理的學習,更該使用兩種模式的切換去了解各個抽象概念以及解決其中所衍伸的問題。 2. 學習是一種創造:     對於新事物,首先需要使用專注模式去學習,當專注逐漸衰退時,就要做一些其他事情進入到發散模式。     對於學習來說,反覆的練習(專注),接著休息一陣子(發散),有助於學習到東西的記憶固化。如同疊磚造牆一樣,當疊了一層磚(專注)後,需要等待水泥乾掉(發散)後再繼續往上疊磚。      而所謂創新,就是在這兩種模式切換的時候會萌生出的火花。     工作記憶,可以在腦中短期停留的四組記憶組塊,可以應付學習初期的記憶;長期記憶則是反覆理解工作記憶後,將它存入大腦的廣大倉庫中,由電腦來說,工作記憶就是RAM,長期記憶則是HDD。     睡眠對於學習來說,相當重要,除了生理上會排除大腦的毒素外,同時也會幫助大腦建立白天學習事物的連結,並強化學習到的記憶,而對於正在解決的問題來說,睡眠可以重新在事物的連結中找到新的角度去解決問題。 3. 記憶組塊與能力的錯覺:     建立記憶組塊:          專心研讀學習的資料         理解學習的資料         建立學習資料的脈絡->鍵入長期記憶的關鍵。     上而下: 觀察自己學習的資料在整個脈絡中的位置  

[小知識]一些常見數學/資訊/鍵盤符號的樣式與發音

From the reference: http://ccckmit.wikidot.com/ma:symbol 數學符號: 大寫 小寫 寫法 念法 提示 Α α alpha ʹæ lfə Β β beta ʹbetə Γ γ gamma ʹgæ mə Δ δ delta ʹdɛltə Ε ε epsilon ʹepsɪlən 與Υυ 的區分在第一個音為 e Ζ ζ zeta ʹzitə Η η eta ʹeɪtə Θ θ theta ʹθitə Ι ι iota aɪʹɔʊtə iota Κ κ kappa ʹkæ pə Λ λ lambda ʹlæ pə Μ μ mu ʹmjuə Ν ν nu ʹnju Ξ ξ xi ʹsaɪ cy, 為了與Ψψ 區分可念 k-si , 也有人念 zi Ο ο omicron ʹɔʊmaɪkrən Π π pi ʹpaɪ 有 py 與 ʹpaɪ 兩種念法 Ρ ρ rho ʹrɔʊ Σ σ sigma ʹsɪgmə Τ τ tau ʹtau Υ υ upsilon ʹjupsɪlən 與 Ε ε 的區分在第一個音為 u 或 a Φ φ phi ʹfaɪ fy Χ χ chi ʹkaɪ ky Ψ ψ psi ʹpsaɪ cy, 為了與 Ξ ξ 區分可念 p-si, 也有人念 ʹpsaɪ Ω ω omega ʹɔʊmɛgə 鍵盤符號: 符號 念法 & Ampersand (And 符號) *  Asterisk (星號) @ At sign, at (At 符號,At) \  Backslash (反斜線) [  Open bracket (左開式方括弧) ^ Caret (插入號) ] Close bracket (右關式方括弧) ( Open parenthesis (左開式圓括號) )  Close parenthesis (右關式圓括號) – Dash (破折號) — Double dash (雙破折號) - Hyphen (連字號) _ Underscore (底線) : Colon (冒號) , Comma (逗號) $ Dollar sign (錢符號) ‘ Single quote (單引號) “