發表文章

在 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 網站 來進行檢測的結果。

[ISO 27001] 移除 IIS 不必要的回應標頭

圖片
ISO 27001 這一系列的文章,是在記錄被弱點掃描報告列出的問題修正。 受影響的條款 IIS 配置設定中包含了一些敏感的訊息,容易引起不必要的的攻擊,建議移除不必要的 Response Header ,範例使用 IIS 10 的版本。 8.2.3 Handling of assets 9.4.1 Information access restriction 12.4.2 Protection of log information 12.4.3 Administrator and operator logs 18.1.3 Protection of records 18.1.4 Privacy and protection of personallyidentifiable information

[ISO 27001] Cookie 相關議題

圖片
ISO 27001 這一系列的文章,是在記錄被弱點掃描報告列出的問題修正。 受影響的條款 12.5.1 Installation of soft ware on operational systems。  Cookies with missing, inconsistent or contradictory properties Cookies without HttpOnly flag set Cookies without Secure flag set

[ISO 27001] TLS / SSL 相關議題

圖片
ISO 27001 這一系列的文章,是在記錄被弱點掃描報告列出的問題修正。 受影響的條款  12.5.1 Installation of soft ware on operational systems TLS 1.0 enabled TLS 1.1 enabled SSL Sweet32 attack TLS/SSL Weak Cipher Suites TLS/SSL certificate about to expire TLS/SSL (EC)DHE Key Reuse HTTP Strict Transport Security (HSTS) not implemented

在 Ubuntu 20.04 上安裝 Azure Devops Agent 建置環境

圖片
前言 Azure DevOps Service 是微軟提供的一個集成式服務,用於規劃、協作、建置和部署軟體,它提供了一整套功能,包括版本控制、工作項追蹤、持續整合(CI)、持續部署(CD)、測試自動化、部署管道等等工具。 但若你要使用 Azure Pipelines 建置程式碼或部署程式,則需要至少一個代理程式,微軟提供的 Azure Agent 提供一個每個月可執行1,800 分鐘數的 CI/CD 免費版本,對於個人開發者來說,基本上已經綽綽有餘了,可以說是很佛心的服務,至少對我這樣的重度使用者來說,這個配額也足夠使用,除非你持續大量提交程式碼,才可能超過這個限制。 由於公司政策的限制,我的公司決定使用地端版的 Azure DevOps Server,但這意味著我需要建立自己的持續整合 (CI) 建置環境,一開始因為是使用微軟的服務,因此很自然的選擇了微軟的作業系統當作 Agent Server。 然而,每次前端環境的建置至少需要 15 分鐘以上,其中大部分時間都花在執行 npm install 上。直到有一天,我讀到保哥分享的文章,發現使用 Ubuntu 的 Agent 環境可以極大地加速建置時間,我花了點時間在雲端環境進行了測試,結果令驚為天人,於是我只好默默的將公司地端的 Agent 也改為 Ubuntu 版本來提高建置效率,這篇文章我要記錄一下設定環境的過程。

[開發環境] MSSQL 資料庫備份

圖片
本文要記錄如何使用維護計畫精靈來設定備份策略,涵蓋了資料庫備份、Log 備份以及 Log 清除三個重要部分,並以 MSSQL 2019 為例,但請注意,SQL Server Express 版本並不支援此功能,若你使用的是 Express 版本,本篇內容並不適用。 新增維護計畫 首先新增維護計畫(如下圖),並輸入維護計畫名稱。 設定執行時間 若需要定期執行排程,可點選下圖行事曆的 icon 來設定執行時間。

[開發環境] MSSQL 全文檢索

圖片
MSSQL 全文檢索是 SQL Server 的一個功能,相較於傳統的 SQL 查詢,全文檢索更適用於對文本內容進行 關鍵字搜索 和相關性匹配,這邊文章是我要紀錄如何安裝及使用,本文介紹以 MSSQL 2019 為例,在開始前,請先完成 資料庫引擎服務 和 搜尋的全文檢索和語意擷取 的功能。 建立全文檢索目錄 全文檢索目錄是個虛擬物件,它是用來當做全文檢索索引的容器,同時不屬於任何檔案群組,可使用介面或者語法來進行新增。 -- 新增全文檢索共用目錄 CREATE FULLTEXT CATALOG DefaultFullTextDoc WITH ACCENT_SENSITIVITY = ON GO