發表文章

[開發環境紀錄] 使用 NCNN + OpenCV 建置 WebAssembly

圖片
在  上一篇  文章中分享了透過別人建置好的 WebAssembly 來進行真假人臉辨識,想說趁此機會順便了解一下 WebAssembly 的開發方式。 由於我是使用 Mac 在訓練深度學習的模型,因此也順理成章的使用 Mac 來進行開發環境的設置,但........... 真沒想到過程異常艱辛,解了一個問題又多出另外一個新的問題,於是只好狠下心來改用 Ubuntu 重頭來過,也因此有了這篇血淚記錄文(執行結果如下圖)。 另外因為牽扯技術過多,本文將不會深入探討各項技術的原理,僅記錄環境的設定過程,對於相關技術有興趣的人,可參閱文末參考網站的連結。 在開始詳細說明之前,先列出最終完成時的開發環境版本: Ubuntu : 24.04 ,作業系統。 Python : 3.12.3,使用 OS 內建版本。 Cmake : 3.28.3,C++ 編譯器。 Emscripten : 3.1.64,用來將 C++ 程式編譯成 WebAssembly 用。 OpenCV: 4.10.0,影像處理套件。

使用 JavaScript 在瀏覽器中進行真人臉部辨識 (基於 face-api.js)

圖片
前言 人臉辨識技術已經是一個非常成熟的技術了,但在過去主要都還是在桌面程式上運行,這幾年隨著硬體性能的飛躍進步和人工智慧框架的日益成熟,如今我們現在已經能夠在瀏覽器中實現許多過去難以完成的功能。 今天這篇文章,我想和大家分享如何在瀏覽器中實現真人臉部辨識,在開始之前,請先了解人臉辨識的基本流程(如下圖所示),主要分為三個部分:取得人臉特徵、活體偵測、以及比對活體特徵。 請注意,網路上很多臉部辨識範例大都沒有提到活體偵測的部分,但這個部分卻是實務運用上很重要的一個環節,因為過去曾經有小學生利用列印的照片進行身份欺騙的例子發生。 另外針對活體偵測,目前業界已經提出了多種方案,例如使用 3D 攝影機或紅外線設備等來輔助判斷,不過本文的目標是在瀏覽器中實現真人臉部辨識,因此我採用其他方法來達成這個目標,後面會再補充說明,底下的影片是最終的實做成果,如果遇到非真人的圖片會顯示無法辨識,若是真人則會進行身分判斷。

使用 NET Core 建置 SAML2 SSO 站台 - 整合應用程式(SP)

了解了的 SAML 的基本概念 和 完成了 Okta 身分驗證服務商設定 ,本文將記錄如何將 SAML 2.0 登入功能整合到您的 Web 應用程式中,常見的 Web 網站分為傳統的 WebForm(即每次點擊會刷新整個頁面)和 SPA(單頁應用程式)搭配 API 的方式。 因為 SPA 牽涉到的範圍比較複雜,後續有機會我會在這篇文章中補充相關內容,在這篇文章中,我將使用 .NET Core 8 MVC 框架 ,並使用 ITfoxtec.Identity.Saml2、ITfoxtec.Identity.Saml2.MvcCore 這兩個套件來為來為網站加上 SAML 2.0 的功能。

使用 NET Core 建置 SAML2 SSO 站台 - Okta 身分驗證服務商(IdP)設定

圖片
在 上一篇 文章中,你應該已經了解了 SAML 是什麼以及其運作原理,在這篇文章中,我將記錄如何申請並設定身分驗證提供商 Okta,但請記得先準備好你的應用程式憑證檔案,通常為 .crt 附檔名結尾,若還不知道那是什麼,請先回到上一篇文章複習一下,如果已經準備好了,就讓我們直接開始吧。 註冊 Okta 開發者帳號 若您還沒有開發者帳號,請先到 Okta 註冊一個開發者帳號。 請注意 Okta 有區分成 Workforce Identity Cloud(公司員工用)和 Customer Identity Cloud(外部客戶)兩個不同的平台,我們這次的範例是要模擬整合內部系統用,因此請選擇註冊 Workforce Identity Cloud。

使用 NET Core 建置 SAML2 SSO 站台 - 基本概念篇

圖片
前言 上一篇文章 幫自己的 NET.Core 站台加上 TOTP 雙因子驗證吧 ,有提到如何幫自己的網站加上 MFA 驗證,但說到身分認證系統服務,就不得不提一下 SAML。 SAML 維基百科的定義 安全主張標記式語言(英語:Security Assertion Markup Language,簡稱 SAML)是一個基於 XML 的開源標準資料格式,它在當事方之間交換身分驗證和授權資料,尤其是在身分提供者和服務提供者之間交換。SAML 是 OASIS 安全服務技術委員會的一個產品,始於2001年。其最近的主要更新發布於2005 年,但協定的增強仍在通過附加的可選標準穩步增加。

幫自己的 NET.Core 站台加上 TOTP 雙因子驗證吧

圖片
前言 最近公司正在規劃明年要幫資訊系統全面導入 MFA,為此 Infra 部門如火如荼的進行了一連串的可行性評估,並找了一些在做身分認證系統服務的 SaaS 服務廠商來展示系統功能,這才讓我想起之前一直想要幫自己的後台加上手機 OTP 驗證的功能,這篇文章我要記錄一下實作過程的筆記,但在開始之前得先大概了解一下何謂 2FA、MFA、OTP,以及它們之間的關係。

在 Apple iMac 上安裝 Tensorflow (使用虛擬環境)

圖片
在上一篇 在 Windows & Mac 環境上安裝 Jupyter Lab  中有提到,因為要執行深度學習模型的訓練,所以拿了閒置的 Mac 電腦安裝了 Jupyter Lab 的環境,在這篇文章中,要記錄如何在 Mac 上安裝 Tensorflow 的執行步驟。 執行環境說明 OS : macOS 12.4  CPU : Apple M1 Python 3.11.7 安裝 Tensorflow 為了怕干擾現有執行環境,這邊是在虛擬環境中安裝 Tensorflow,若不需使用虛擬環境底下前兩個步驟可以不執行,相關步驟如下說明。 創建虛擬環境(tfenv 這個名稱可自行調整)。 python3 -m venv ~/Developer/tfenv 切換到虛擬環境。 source ~/Developer/tfenv/bin/activate

在 Windows & Mac 環境上安裝 Jupyter Lab

圖片
前言 最近開始在做碩專論文第二階段的實驗,過去因為第一階段的實驗範圍是機器學習相關的演算法,所以 Google colab 就足以應付了,但第二階段開始要進行深度學習的演算法,發現 Colab 已經沒辦法滿足我的需求了,因此不得已只能在本地端的環境上架設 Jupyter Lab 來當作實驗環境了。 一開始我先在 Windows 環境上安裝,但因為該環境上沒有顯示卡,所以跑起來頗為吃力,幸好我手邊有一台閒置的 iMac(M1晶片),所以改用 Mac 來進行安裝,目前看來,搭配 iMac 的效能確實比僅擁有 CPU 的 Windows 環境好很多,因此,本文將記錄我在這兩個平台上的設定過程和相關步驟。 對了,在囉嗦一句,因為未來可能會有不同套件版本的需求,所以實務上建議將 Jupyter Lab 安裝在虛擬環境上面,至於如何安裝在虛擬環境?這個後續我會在另外一篇在分享了。

[ESP32 系列] 初探 ESP32

圖片
前言 睽違了三四年沒有碰  Micro:bit 開發版 , 直到去年九月回到學校進修才又開始翻箱倒櫃的找出這個小玩意來玩玩,上學期的課程使用的是 專攻邊緣運算的 Jetson Nano,但有了之前買了一堆感應器,最後因為沒時間可以玩,又放著變成電子垃圾的教訓,因此上學期收起我衝動的心,就只有使用實驗室的設備玩玩而已(其實是怕被老婆唸 XD)。 這學期我修了一門資安課,內容相當豐富,不僅探討了網路、資訊安全,還涉及到了密碼學等多個領域,課程的重點放在研究 IoT 設備在資料傳輸上的安全問題,更酷的是,我們還使用 IoT 設備來進行了 RSA 加密的實驗。 老師非常慷慨地給了我們每人一套 ESP32 + OLED + 溫溼度感測器,讓我們可以實際動手操作,通過 RSA 加密來保護這些 IoT 設備在雲端傳輸資料的安全性,雖然課後老師沒有要求我們撰寫實驗報告,但我覺得這些實驗實在太有趣了,而且都花了時間了,怕自己過段時間就會忘記,所以我特在這個網誌把所有的實驗的重要步驟都記錄下來,方便自己以後查詢。

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

圖片
前言 你有沒有曾經使用 Google 瀏覽器登入某個網站時,突然跳出「你的密碼已遭洩露」的訊息? 除非你用的密碼堅不可摧、每個網站都設定不同,否則你多多少少應該都會遇到這種情況吧。 如果你的回答是 No,我的密碼很安全,怎麼可能發生在我身上的話,你也別高興得太早,國外有位工程師寫了一個網站叫做 Have I been pwned ,收集了過去數年來洩露的數十億筆密碼資料 (我強烈懷疑這工程師自己也是暗網的潛在賣家,不然誰身上可以蒐集到這麼多資料呢 XD),只要你輸入常用的帳號,這網站就會告訴你是否有洩漏的風險,如下圖,我自己電子郵件信箱也無法倖免。 好啦,言歸正傳。近年來,資安意識興起,各大網站都開始提倡 MFA (多重要素驗證),就連我國內政部的系統也開始全面無密碼化,改用自然人憑證來進行登入,但對於個人開發的小網站,要求使用者安裝額外設備或 APP 來實現多因素認證,未免太不切實際。 如果有一種機制,可以直接利用大家都有的手機來進行驗證,是不是就更完美了呢?WebAuthn 就是為了這個目的所存在的。

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

圖片
情境說明 從我開始寫程式以來,LDAP 這項技術就一直存在,但對於缺乏 Infrastructure 背景的我來說,過往的知識都僅侷限在使用程式進行 Active Directory(AD)驗證,如 DN、CN、OU、DC 等相關術語,老實說我從未真正深入了解過(有點心虛)。 最近開發一個小需求,需要驗證使用者輸入的郵件是否存在的功能,在開發過程中出現了一個奇怪的現象:只要透過程式登入,外部網路就會斷線。經過 Infra 部門的查詢,他們發現防火牆(PA)的設定導致了這個問題。公司的政策限制了部分帳號的對外網路存取權限,但這次的問題是,程式綁定了一組可以查詢 AD 資料的帳號後,防火牆政策誤判我的開發機使用的是那一組沒有對外網路存取權限的帳號,因而封鎖了對外網路的存取權限。 這對開發人員來說,造成了一些困擾,因為每次都需要關閉所有開發工具,並登出重新登入,因此也趁此次機會,我決定在虛擬機(VM)上認真地建立一個AD,以滿足我的開發需求,同時也趁這個機會深入了解 LDAP 的運作原理。

解決在 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/' 這個問題已經發生了多次,每次發生時都需要重新上網查找解決方案,為了方便日後查閱,我將解決方法做了筆記,方便後續自己查看。

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

圖片
QRCode 電子名片是什麼?  QRCode 電子名片是一種方便快捷的方式,讓您可以將您的聯絡方式以 QRCode 的形式分享給他人。這個 QRCode 可以包含您的姓名、職稱、公司名稱、電話號碼、電子郵件地址等聯絡資訊。當他人掃描這個QR碼時,這些資訊就會自動地添加到他們的手機聯絡人中,而無需手動輸入。 它的技術術語稱為 "MeCard" 二維條碼,是一種標準的電子名片格式,不知道這是什麼的人請自行 Google 一下,它可以包含各種聯絡資訊。通常,這個格式可以被大多數智能手機和電子郵件客戶端所識別和使用。 目前訪間已經有許多現有的 Web 服務,上傳人員的名片資料後會產生類似下圖的電子名片,但大多數是要註冊會員,大量使用甚至需要收費,而且可能會把員工的個資留在這些 SaaS 廠商的平台上。

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

圖片
在開發上有時候會有串接外部服務,如 OAuth、Webhook 的需求,再加上目前各大服務平台都已要求再回 Call 的網址都必須提供 https 憑證才行,這也造成了本地開發階段時的不便,ngrok 就是為了解決此問題而存在的服務。 ngrok 是個知名的內網穿透雲端服務,意思是說你的設備不需要Public IP,透過他的Agent建立Tunnel將服務暴露到外網上  

Grafana 發送異常通知(監控 WAF 異常流量)

圖片
前言 在前幾篇文章中,我記錄了 如何安裝 Grafana 以及 將事件器的 Log 整合至 Grafana 進行集中管理,當然除了日誌,如果希望監控其它指標,比如伺服器效能,也都可以統一傳送至 Grafana 方便進行管理,但這些我就不再一一介紹了。 另外當系統出現異常時,提供即時通知是非常重要的功能,本文將分享如何在 Grafana 中設定異常通知功能,Grafana 支援多種異常通知方式,包括 LINE、郵件、API、Teams 等,這裡會分享我自己使用的兩種方式:【LINE 通知】和【呼叫外部 API】。 接下來,我將詳細說明這兩種通知方式的設定步驟。

Grafana 事件檢視器監控面板(搭配 WAF ModSecurity 異常監控事件進行設定)

圖片
這篇文章我要記錄一下自己再用的幾個監控面板,但在開始前必須要先完成【 Windows ModSecurity WAF 】、【 Grafana + Loki + Promtail 安裝紀錄 】這兩篇的設定才可以繼續進行後續的面板設定。 事件明細(1) 新增 Visualizations 類型選擇 Logs,並選取底下的查詢條件,目的僅顯示異常的紀錄。 logsource = WindowsEventlog Source = ModSecurity Level = 2,僅顯示嚴重的項目,若要全部出現也可不設定此項目。 資料維度轉換,目的是要排除不想看到的資料內容,僅留下想看到的資訊。 Extract fields,將欄位 Line 的 Log 明細使用 key+values 欄位攤開。 Organize fields,根據需求顯示需要的欄位,我的範例是僅保留 level、eventRecordID、Time、event_data 。 設定面板設定,根據自己的需求調整即可。 Title : 事件明細。 完成設定如下圖所示。

Grafana Loki 安全性設定 (使用 IIS ARR)

圖片
在 上一篇 文章有紀錄 Grafana 和 Loki 的安裝,但根據 官網的說明 ,Grafana Loki 本身並不包含授權的功能,所以需要依靠 reverse proxy 來完成此需求,本篇則是使用 ARR 來進行設定。 前置條件 下載並安裝 URL Rewrite 。 下載並安裝 Application Request Routing , ARR 相關設定可參考 這一篇文章 的說明。 Step1. URL 重寫 RewriteMaps 設定 此設定是為了,當 Client 端的請求包含了指定的 Custome Header,並且符合內部定義的 Key 時,會使用 value 值來取代, 講人話就是,你的授權 Token 設定的地方 ,底下的設定代表,我核發了 Lawrence & Lawrence2 兩個 Token,若滿足條件,則比對其值 Y。 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rewriteMaps> <rewriteMap name="Authorized Clients"> <add key="Lawrence" value="Y" /> <add key="Lawrence2" value="Y" /> </rewriteMap> </rewriteMaps> </rewrite> </system.webServer> </configuration>

Grafana + Loki + Promtail 安裝紀錄( Windows Event Log 為範例)

圖片
安裝 Grafana Grafana 是一個跨平台、開源的資料視覺化網路應用程式平台,使用者可透過組態設定來連接多個資料來源,並且在此平台內顯示資料圖表或警告等等,例如,將各伺服器的事件檢視器的 Log 統一發送到 Grafana 監控,底下為安裝步驟的紀錄。 下載 grafana-10.2.2.windows-amd64.msi OSS 版本 並安裝 。 因預設使用 3000 Port 會與我另外一個服務 Rendertron 衝突,故需要調整一下 Port,這邊用 3333,若沒有這個問題,可略過此步驟。 調整設定檔 C:\Program Files\GrafanaLabs\grafana\conf\defaults.ini 內,找到 http_port 並調整為 3333。 # The http port to use # http_port = 3000 http_port = 3333 若有需要 開啟外部連線 ,也記得要調整 defaults.ini 的設定,若只有不提供外部使用可忽略此步驟。 # The public facing domain name used to access grafana from a browser domain = localhost # 若直接對外開放需要改成你的 Domain # Redirect to correct domain if host header does not match domain # Prevents DNS rebinding attacks enforce_domain = true # The full public facing url # 若有使用 reverse proxy server 進行轉址 # 也請改成你的對外網址,顯示的 http 協定或 port 可能不正確 root_url = https://你的Domain # root_url = %(protocol)s://%(domain)s:%(http_port)s/

Ubuntu ModSecurity WAF(Nginx 應用程式防火牆 Open Source 解決方案)

圖片
先前  Windows ModSecurity WAF 這篇文章有說明,什麼是 WAF,以及如何在 IIS 上面安裝 WAF,這篇我要記錄一下如何在 Ubuntu + Nginx 上安裝 WAF 模組。 安裝 ModSecurity 安裝必要套件 LibModSecurity,或者可以參考選擇自行建置,底下參考網站有很多自行建置的方法。 sudo apt-get install libmodsecurity3 # Ubuntu 下載與已安裝的 nginx 相同版本的 Source Code ,並且壓縮。 $ nginx -v # 1.18.0 $ wget http://nginx.org/download/nginx-1.18.0.tar.gz $ tar zxvf nginx-1.18.0.tar.gz $ rm nginx-1.18.0.tar.gz 下載 ModSecurity/Nginx 連接器。 git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git 設置和建置 ModSecurity 動態模組,成功建置後會產生一個 ngx_http_modsecurity_module.so 檔案到 ~/nginx-1.18.0/objs 目錄底下。 $ cd ~/nginx-1.18.0 $ ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx x $ make modules

Nginx 使用 Let's Encrypt (以 Ubuntu 22.04 為例)

圖片
本篇紀錄 Nginx 上面掛載 SSL 憑證的步驟,相關說明如下。 安裝 Certbot for nginx 使用  站台對應的 Server 必須事先對應好,這裡不在說明,請自行參考 這篇 的說明。 因為在測試環境上,沒有辦法開放 80 & 443 Port,所以這邊先使用 萬用子網域憑證 ,執行底下的程式碼, --manual 參數的關係,接下來的命令都會使用互動的方式來進行。  執行完上面那段語法會跳出 dns-01  challenge,並提供一個值,請拿這個值到 DNS 後台進行設定。

Windows ModSecurity WAF (IIS 應用程式防火牆 Open Source 解決方案)

圖片
WAF 維基百科定義 網頁應用程式防火牆(英語:Web Application Firewall,縮寫:WAF)是一種特定形式的 應用程式防火牆 ,用於過濾、監視和阻斷通過網頁服務的 HTTP 流量。透過監察HTTP 流量 ,它可以防止利用網頁應用程式已知漏洞的攻擊,例如 SQL 注入 、 跨網站指令碼 (XSS)、檔案包含和不正確的系統組態。 WAF 與傳統防火牆 Firewall 的差異 傳統防火牆主要的辨識範圍最多只到網路架構第四層-傳輸層 (OSI 4 layer),傳統防火牆無法分析 HTTP 與網站應用程序例如: HTML、SQL語言等,然而隨著科技進步,如今駭客已經能夠輕易入侵網站應用程式的漏洞,攻擊至第七層應用層 (OSI 7 layer),傳統防火牆無法對應用層的攻擊進行有效防禦,因此造就 WAF 的出現。

[開發環境] 安裝 Nginx 並設定對應不同網域的站台 (以 Ubuntu 22.04 為例)

圖片
使用 APT 進行安裝 Nginx 更新 Ubuntu 系統的 apt 版本。 sudo apt update 查詢 nginx  官網提供可安裝的版本。 apt-cache madison nginx 安裝指定的版本,系統應該會詢問是否進續安裝,請輸入 y,並按照指示進行後續的動作,預設安裝完畢後,服務應該就已經啟動了。 sudo apt install nginx=1.18.0-6ubuntu14.4 確認 nginx 服務是否有在運行,若看到底下的畫面代表已啟動成功。 systemctl status nginx

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

圖片
當我們建立服務型網站時,通常希望能夠獲得來訪者的相關資訊,一種常見的土炮方法是在網頁上自行開發程式以取得使用者的相關資訊,但我們所能取得的資訊有限,很多數據可能需要後續處理,例如使用者的國家別,甚至可能沒辦法取得,因此分析起來可能相對不夠完整,身為開發者應該都知道不要重複造輪子,而且現有的分析工具眾多,基於站在巨人的肩膀上的原則,當然很自然的選擇 Google 提供的服務。 Google Analytics(GA) 是由 Google 提供的網站流量統計服務,只要在想要監控的網頁加入 GA 提供的一小段 JavaScript 代碼,每當用戶訪問該頁面時,就會將相關資訊如使用者所在國家、進入該頁面的關鍵字等傳送至 GA 伺服器,並整合成易讀的報表供網站擁有者查看。 另外,GA4 還提供了多種預設的分析報表,並且還可以自訂不同的分析維度,下圖展示了登入後可見的其中一個數據畫面,網路上有許多專家分享如何使用 GA4,這裡就不再贅述,建議自行查找相關資料以了解如何使用 GA4。

[開發環境] 使用 Rendertron 技術優化 Angular 網站 SEO

圖片
前言 在 2016 年時,曾經寫過一篇關於 SEO 優化的文章  [SEO優化] Microdata類別(itemtype)實作  ,時隔多年,現在有越來越多的網站都已經改成前後端分離,前端採購 SPA 的框架,筆者自己寫的 寶貝評論+ 也不例外。 什麼是 SPA (Single-Page Application) 單頁式應用程式 ?  維基百科的說明是,它是一種網路應用程式或網站的模型,它透過動態重寫當前頁面來與使用者互動,而非傳統的從伺服器重新載入整個新頁面。 簡單來說, 當你從伺服器下載網頁到瀏覽器時,一開始該網頁並不包含實際內容,而是在下載完成後,動態抓取並呈現你所看到的內容 。常見的 SPA 前端開發框架包括 Angular、Vue 和 React。

[ISO 27001] 其它 Http Headers 相關議題

圖片
ISO 27001 這一系列的文章,是在記錄被弱點掃描報告列出的問題修正。 受影響的條款 12.5.1 Installation of soft ware on operational systems Content Security Policy (CSP) not implemented Permissions-Policy header not implemented HTTP Strict Transport Security (HSTS) not implemented 檢測網站設定 下圖是尚未改善前,使用 Security Headers 網站 來進行檢測的結果。