發表文章

別因不安全的密碼讓你的資料裸奔了,了解一下如何為網站加上 WebAuthn 無密碼驗證吧

圖片
前言 你有沒有曾經使用 Google 瀏覽器登入某個網站時,突然跳出「你的密碼已遭洩露」的訊息? 除非你用的密碼堅不可摧、每個網站都設定不同,否則你多多少少應該都會遇到這種情況吧。 如果你的回答是 No,我的密碼很安全,怎麼可能發生在我身上的話,你也別高興得太早,國外有位工程師寫了一個網站叫做 Have I been pwned ,收集了過去數年來洩露的數十億筆密碼資料 (我強烈懷疑這工程師自己也是暗網的潛在賣家,不然誰身上可以蒐集到這麼多資料呢 XD),只要你輸入常用的帳號,這網站就會告訴你是否有洩漏的風險,如下圖,我自己電子郵件信箱也無法倖免。 好啦,言歸正傳。近年來,資安意識興起,各大網站都開始提倡 MFA (多重要素驗證),就連我國內政部的系統也開始全面無密碼化,改用自然人憑證來進行登入,但對於個人開發的小網站,要求使用者安裝額外設備或 APP 來實現多因素認證,未免太不切實際。 如果有一種機制,可以直接利用大家都有的手機來進行驗證,是不是就更完美了呢?WebAuthn 就是為了這個目的所存在的。 起因 為什麼會寫這個主題呢?其實是因為上學期我在成大碩專班的資安課程,有個 Zero Trust Architecture 的期末報告,老師提到如果有實作會有額外的加分,於是我們小組便決定,既然要做,不如就做一個簡單的系統,讓大家可以更清楚的了解這個架構是怎麼運作的,底下是實作完成的影片,影片中有一段黑畫面沒辦法錄到,但那段是我們呼叫手機的指紋驗證器進行登入驗證的過程。 在開始運作原理之前,先看一下我們的題目,NIST SP 800-207 第三章:零信任架構邏輯元件,EIG Crawl Phase 的參考架構圖。 WebAuthn 是什麼 ? WebAuthn,全名 Web Authentication,是一種基於非對稱加密技術的身份驗證方式,主要是希望取代傳統的密碼驗證,並用於網站的註冊、登入以及雙因素認證(2FA)等場景。這個技術不僅能夠有效解決釣魚攻擊和數據泄露等安全問題,同時還能提升用戶的使用體驗,因為使用者不必再記憶複雜的密碼。 通過 WebAuthn 提供的 API,我們可以輕鬆實現指紋識別、人臉識別等生物特徵的驗證,或者是利用加密硬體,如USB Key、藍牙設備等進行身份驗證。 簡單來說,WebAuthn 讓使用者可以直接使用自己已有的設備來進行

使用 NET.Core 進行 LDAP 物件屬性驗證

圖片
情境說明 從我開始寫程式以來,LDAP 這項技術就一直存在,但對於缺乏 Infrastructure 背景的我來說,過往的知識都僅侷限在使用程式進行 Active Directory(AD)驗證,如 DN、CN、OU、DC 等相關術語,老實說我從未真正深入了解過(有點心虛)。 最近開發一個小需求,需要驗證使用者輸入的郵件是否存在的功能,在開發過程中出現了一個奇怪的現象:只要透過程式登入,外部網路就會斷線。經過 Infra 部門的查詢,他們發現防火牆(PA)的設定導致了這個問題。公司的政策限制了部分帳號的對外網路存取權限,但這次的問題是,程式綁定了一組可以查詢 AD 資料的帳號後,防火牆政策誤判我的開發機使用的是那一組沒有對外網路存取權限的帳號,因而封鎖了對外網路的存取權限。 這對開發人員來說,造成了一些困擾,因為每次都需要關閉所有開發工具,並登出重新登入,因此也趁此次機會,我決定在虛擬機(VM)上認真地建立一個AD,以滿足我的開發需求,同時也趁這個機會深入了解 LDAP 的運作原理。 LDAP 簡介 在開始之前,還是得先簡單的了解一下何謂 LDAP,它是一個輕量級目錄存取協定,英文全名,(Lightweight Directory Access Protocol),你可以想像它是類似於通訊錄的協定,用於定義組織結構、電腦、以及員工基本資訊等內容,此外,LDAP還可用於進行權限的驗證。 在微軟的生態系統中,有一個廣為人知,基於 LDAP 協定實作的產品,稱為 Active Directory,通常簡寫為AD,它是一個用於管理組織內的資源、提供身份認證服務的目錄服務,並且支援 LDAP 協定,使得組織能夠有效地組織、存取和管理其資源。 而 LDAP 目錄結構主要由底下幾個重要項目所組成 DN,Distinguished Name:識別名稱,一筆記錄的完整位置,ex. 【CN=沈小凱,OU=資訊處,OU=高雄,OU=_Taiwan,DC=pex,DC=com】。 CN,Common Name:用戶或單位名稱,一筆記錄的名字。 OU,Organizational Unit:組織單位名稱,一筆記錄所屬組織。 DC,Domain Componet:網域元件,一筆記錄所屬區域。 AD 架設流程 AD 測試環境為 Server 2019,網路上有很多設定的教學步驟,詳細也可以參考

解決在 MacOS 的環境下無法將程式碼 push 到 Azure DevOps Git 的問題

圖片
因為工作的關係,需要在不同作業系統下進行開發,為了統一管理程式碼,我採用了 Azure DevOps Git 私有庫作為版控工具。在 Windows 環境下,推送程式碼只需輸入帳號密碼即可成功進行,但在 MacOS 環境下,推送程式碼至存儲庫時卻會遇到 "fatal: Authentication failed" 的錯誤訊息。 lawrence@iMac TestRepo % git push origin master Username for 'https://mydevgit.visualstudio.com': <我的登入帳號> Password for 'https://<我的登入帳號>@mydevgit.visualstudio.com': <我的登入密碼> fatal: Authentication failed for 'https://mydevgit.visualstudio.com/Default/PE/_git/TestRepo/' 這個問題已經發生了多次,每次發生時都需要重新上網查找解決方案,為了方便日後查閱,我將解決方法做了筆記,方便後續自己查看。 解決方式 許多人 提到 ,這個問題只在 Mac 上發生。有些人建議使用個人存取權杖 (Personal Access Token) 來進行登錄,這樣可以解決問題。以下是設定步驟的紀錄: 登錄到 Azure DevOps 後台,在上方導覽列中找到設定圖示, 點擊設定圖示後,在下拉選單中選擇「Personal access tokens」,如下圖所示。 進入設定畫面後,請點擊「New Token」按鈕。 輸入名稱後,選擇適當的到期時間。接著,請尋找並勾選「Code」範圍,這將授予存取代碼存儲庫的權限。完成後,點擊「Create」按鈕以生成存取權杖。 完成後,您將獲得一個存取權杖。請記下此權杖,因為您將需要在登入時使用它。將此權杖視為您的密碼,當您需要推送程式碼到 Azure DevOps Git 存儲庫時,請使用此權杖來代替密碼。這樣應該能夠解決在 MacOS 上無法登入的問題。 小提醒, 雖然已設定了憑證的有效期限,但在實際使用中仍可能遇到在有效期內,但每次 Pull 或 Push 卻要求重新

[工具] 批次產生 QR Code 電子名片

圖片
QRCode 電子名片是什麼?  QRCode 電子名片是一種方便快捷的方式,讓您可以將您的聯絡方式以QR碼的形式分享給他人。這個QR碼可以包含您的姓名、職稱、公司名稱、電話號碼、電子郵件地址等聯絡資訊。當他人掃描這個QR碼時,這些資訊就會自動地添加到他們的手機聯絡人中,而無需手動輸入。 它的技術術語稱為 "MeCard" 二維條碼,是一種標準的電子名片格式,不知道這是什麼的人請自行 Google 一下,它可以包含各種聯絡資訊。通常,這個格式可以被大多數智能手機和電子郵件客戶端所識別和使用。 目前訪間已經有許多現有的 Web 服務,上傳人員的名片資料後會產生類似下圖的電子名片,但大多數是要註冊會員,大量使用甚至需要收費,而且可能會把員工的個資留在這些 SaaS 廠商的平台上。 開發小工具的念頭 前幾天朋友提到說有沒有串接過 QRCode 電子名片的服務,經過了解後,發現他們只是想要將公司員工的名片電子化,但卻缺乏開發能力,所以想說借助外部平台來產生,跟他們確認過後,他們不需要華麗的外表,只要能批次產生 QRCode 即可,並且他們會自行分派給各員工,所以貢獻一下開源的小工具的時候又到了。 如何使用 底下這張圖是小工具的執行畫面,使用 NET Core 8 開發的, 支援產生多語系的 QRCode 名片 ,但如果你什麼都不管的情況下,預設已經包含了繁體中文和英文語系的名片欄位了,理論上直接執行VcardQRCodeGenerator.exe 就可以使用了,但如果你想要自行調整呈現的欄位(當然你可能要先 Google 一下 MeCard 支援的欄位名稱),可以繼續看下去。 Excel 樣板說明 下載 Excel 檔案後,打開來會看到下圖的欄位,請記住 第一列的標題列是必填欄位 ,並且這裡的欄位名稱會對應後面說明的參數設定,因此請先詳讀參數設定的說明後再回頭調整這個欄位,第二列之後就是你的名片資料了,可以自行增減。 參數說明 如果你想要調整增減語系,或者修改名片的欄位,必須先勾選修改參數欄位,接著底下的設定檔欄位會開啟編輯模式。 此設定檔是一個 JSON 的格式,很抱歉如果你不知道的話也請自行 Google 一下,因為我有檢查格式是否為 JSON 格式,如果你不太確定修改是否正確的話,可以利用一些 小工具 來進行檢查。 資料夾內會有一個 logo.pn

[開發環境] ngrok 外部網路連開發環境神器 (LINE Messaging 為例)

圖片
在開發上有時候會有串接外部服務,如 OAuth、Webhook 的需求,再加上目前各大服務平台都已要求再回 Call 的網址都必須提供 https 憑證才行,這也造成了本地開發階段時的不便,ngrok 就是為了解決此問題而存在的服務。 ngrok 是個知名的內網穿透雲端服務,意思是說你的設備不需要Public IP,透過他的Agent建立Tunnel將服務暴露到外網上   紀錄使用步驟 使用 net core 6.0 開發的 LINE Bot 機器人的站台為例, 範例程式 。 LINE Bot 設定 僅第一次使用須執行此步驟,先到 LINE 開發者  後台取得 Channel secret (如下圖紅框處),並將該值貼到程式  public class LineWebHookController : isRock.LineBot.LineWebHookControllerBase { [Route("api/LineBotWebHook")] [HttpPost] public IActionResult POST() { var AdminUserId = "要通知的管理者 ID,通常是你自己的 User ID"; //設定ChannelAccessToken this.ChannelAccessToken = "APP 的 Channel secret"; } } 執行開發站台 完成上述設定後即可開啟本地開發站台,如下圖範例使用 http://localhost:5001 Ngrok 設定 第一次使用請先到 ngrok 後台取得 AuthToken 到 ngrok 的目錄,使用 Command Line 執行底下的指令,目的是要使用 ngrok proxy 所接收到的請求轉到本地開發環境,啟動後可以看到底下的畫面。 d C:\Software\ngrok ngrok config add-authtoken 你的 AuthToken ngrok http 5001 成功啟動後可以得到一個臨時的對外服務的網址,也可以到後台到 ngrok 後台取得本次啟動後取得的臨時網址。 LINE Bot Webhook

使用 NET.Core 串接 Google Analytics API 來顯示即時分析數據

圖片
當我們建立服務型網站時,通常希望能夠獲得來訪者的相關資訊,一種常見的土炮方法是在網頁上自行開發程式以取得使用者的相關資訊,但我們所能取得的資訊有限,很多數據可能需要後續處理,例如使用者的國家別,甚至可能沒辦法取得,因此分析起來可能相對不夠完整,身為開發者應該都知道不要重複造輪子,而且現有的分析工具眾多,基於站在巨人的肩膀上的原則,當然很自然的選擇 Google 提供的服務。 Google Analytics(GA) 是由 Google 提供的網站流量統計服務,只要在想要監控的網頁加入 GA 提供的一小段 JavaScript 代碼,每當用戶訪問該頁面時,就會將相關資訊如使用者所在國家、進入該頁面的關鍵字等傳送至 GA 伺服器,並整合成易讀的報表供網站擁有者查看。 另外,GA4 還提供了多種預設的分析報表,並且還可以自訂不同的分析維度,下圖展示了登入後可見的其中一個數據畫面,網路上有許多專家分享如何使用 GA4,這裡就不再贅述,建議自行查找相關資料以了解如何使用 GA4。 因為本身有開發 寶貝評論+ 的分享平台,因此我也不例外會需要查看使用者的分析數據,但作為一名熱愛程式開發的軟體開發者,當然會希望在自己的管理後台看到我需要的數據,如下圖是整合後的其中一個畫面。 幸運的是,GA4 提供了 API 可供串接,雖然有呼叫頻率限制,詳細資訊可參考 官方的限制與配合 ,除非你是每分鐘都在查看分析數據的重度使用者,否則應該是足夠使用的。接下來這篇文章,我要記錄一下如何使用 NET.Core 來呼叫 Google Analytics Data API。 建立服務的步驟 在開始之前,必須先建立 Google Cloud 專案並啟用相關設定。官方的 API 快速入門導覽課程  紀錄得非常清楚,這裡只列出幾個重要的步驟。 建立 Google Cloud 專案,若已有存在的專案可跳過此步驟。 啟用 Google Analytics Data API。 建立憑證->服務帳戶。 服務帳戶 -> 新增金鑰 -> 建立新的金鑰 -> JSON,下載產出的 JSON 檔案。 將 JSON 檔內的 email 加入到 GA 檢視者的角色,並取得 PropertyId 後即可進行串接的開發。 新增權限。 查看  PropertyId。 程式開發的步驟 本文使用 Google.A