2025年7月30日 星期三

2025年7月29日 星期二

[研究]ASP.NET WebForm網站 Highcharts 12.3.0 套件試用

[研究]ASP.NET WebForm網站 Highcharts 12.3.0 套件試用

2025-07-29

  • Highcharts 是一套用 JavaScript 撰寫的互動式圖表庫,支援多種圖表類型(折線圖、長條圖、圓餅圖、雷達圖等)。
  • 它有豐富的客製化選項與動畫效果,支援響應式設計(手機/桌面自適應)。
  • 採用純前端繪圖(SVG / VML),無需安裝外部軟體。
  • 免費用於非商業用途,商業使用需購買授權。

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="https://code.highcharts.com/highcharts.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Literal ID="ltChartScript" runat="server"></asp:Literal>
            <div id="chartContainer" style="width: 600px; height: 400px; margin: 0 auto"></div>
        </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 模擬資料,可以換成從資料庫讀取
            string categories = "[ '一月', '二月', '三月', '四月', '五月', '六月' ]";
            string data = "[29.9, 71.5, 106.4, 129.2, 144.0, 176.0]";

            // 組成 Highcharts 初始化 JavaScript
            string script = $@"
        <script type='text/javascript'>
            document.addEventListener('DOMContentLoaded', function () {{
                Highcharts.chart('chartContainer', {{
                    chart: {{ type: 'line' }},
                    title: {{ text: '每月銷售量' }},
                    xAxis: {{
                        categories: {categories}
                    }},
                    yAxis: {{
                        title: {{
                            text: '銷售量 (單位)'
                        }}
                    }},
                    series: [{{
                        name: '銷售量',
                        data: {data}
                    }}]
                }});
            }});
        </script>";

            ltChartScript.Text = script;
        }
    }
}






下圖,執行結果

********************************************************************************
補充
下圖,輸入  Highcharts 會有一堆

下圖,要輸入 Highsoft.Highcharts 才對,目前 NuGet 最新提供到 11.4.6.5版


WebApplication1

正在安裝:

Newtonsoft.Json.13.0.3
Highsoft.Highcharts.11.4.6.5


********************************************************************************
補充
Highcharts 與其他類似圖表元件比較

元件 優點 缺點
Highcharts - 功能強大且支援多種圖表類型- 互動性佳,動畫流暢- 文件豐富,社群活躍- 支援響應式與手機友好 - 商業用途需付費授權- JavaScript庫較大,對頁面載入有影響- 有時自訂化較複雜
Chart.js - 開源免費- 輕量級、簡單易用- 支援動畫和響應式設計 - 功能相對少- 不支援某些複雜圖表類型- 擴展性有限
Google Charts - 免費且整合Google生態- 易於使用與嵌入- 支援多種圖表與互動 - 需連線Google服務- 自訂化不如Highcharts靈活- 需注意隱私與政策
FusionCharts - 功能完整、商業支援良好- 多平台支援(包括伺服器端) - 商業授權昂貴- 相較Highcharts,學習曲線稍陡峭
D3.js - 最強大的資料視覺化函式庫- 完全自由自訂圖表與互動 - 開發門檻高- 需要深入JavaScript知識- 不適合快速上手

(完)

相關



x

[研究]ASP.NET, WebForm, NodaTime 3.2.2日期與時間處理函式庫套件試用

[研究]ASP.NET, WebForm, NodaTime 3.2.2日期與時間處理函式庫套件試用

2025-07-29

官方網站
https://nodatime.org/

https://github.com/nodatime

官方沒公開 CVE 報告
https://github.com/nodatime/nodatime.org/security/advisories

Noda Time 是一個用於 .NET 的日期與時間處理函式庫,旨在取代 System.DateTime,提供更準確且清晰的 API。其靈感來自於 Java 的 Joda-Time 函式庫。

✅ Noda Time 的優點:

  • 明確區分 本地時間 (LocalDateTime)、區域時間 (ZonedDateTime)、不含時區時間 (LocalDate)。
  • 內建時區資料庫(tzdb),支援 IANA 時區(例如 "Asia/Taipei")。
  • 避免使用 DateTimeKind 混亂(如 Unspecified, Utc, Local)。
  • 適合處理複雜日曆邏輯,例如夏令時間轉換。
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2



WebApplication1

正在安裝:

System.Runtime.CompilerServices.Unsafe.6.0.0

NodaTime.3.2.2


********************************************************************************

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <h2>目前台北時間:</h2>
            <asp:Label ID="lblTaipeiTime" runat="server" Font-Bold="true" Font-Size="Large" />

            <h3>輸入 ISO 時間字串(例如:2025-07-29T09:00:00)</h3>
            <asp:TextBox ID="txtIsoInput" runat="server" Width="300px" />
            <asp:Button ID="btnConvert" runat="server" Text="轉換成台北時間" OnClick="btnConvert_Click" />
            <br /><br />
            <asp:Label ID="lblConvertedTime" runat="server" ForeColor="DarkGreen" Font-Bold="true" />
        </div>
    </form>
</body>
</html>

Default.aspx.cs

using NodaTime;
using NodaTime.Text;
using System;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // 顯示目前台北時間
                var now = SystemClock.Instance.GetCurrentInstant();
                var taipeiZone = DateTimeZoneProviders.Tzdb["Asia/Taipei"];
                var zonedNow = now.InZone(taipeiZone);

                lblTaipeiTime.Text = zonedNow.ToString("yyyy-MM-dd HH:mm:ss z", null);
            }
        }

        protected void btnConvert_Click(object sender, EventArgs e)
        {
            var input = txtIsoInput.Text.Trim();

            // 嘗試解析使用者輸入的 ISO 字串
            var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy-MM-dd'T'HH:mm:ss");
            var parseResult = pattern.Parse(input);

            if (!parseResult.Success)
            {
                lblConvertedTime.Text = "⚠️ 格式錯誤,請輸入合法的 ISO 時間(例如:2025-07-29T09:00:00)";
                return;
            }

            LocalDateTime ldt = parseResult.Value;
            var taipeiZone = DateTimeZoneProviders.Tzdb["Asia/Taipei"];
            var zoned = ldt.InZoneLeniently(taipeiZone); // 可能跨 DST

            lblConvertedTime.Text = $"台北時間:{zoned.ToString("yyyy-MM-dd HH:mm:ss z", null)}";
        }
    }
}


(完)

相關



xx

[研究]ASP.NET WebForm 網站 iCal.Net 5.1.0 行事曆套件試用

[研究]ASP.NET WebForm 網站 iCal.Net 5.1.0 行事曆套件試用

2025-07-29

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

https://github.com/ical-org/ical.net

https://www.nuget.org/packages/Ical.Net

Ical.Net 是一套 .NET 函式庫,用來建立、讀取與處理 iCalendar (.ics) 格式的行事曆資料。這是 RFC 5545 標準格式,支援跨平台行事曆應用程式如 Google Calendar、Apple Calendar、Outlook 等。

Ical.Net 是目前 .NET 環境下最推薦的 iCalendar 處理函式庫,尤其適用於:

  • ASP.NET WebForm / MVC / Web API 專案
  • 無法使用 Office Interop 的後端或雲端服務
  • 需要完整 RFC 5545 支援的情境(如排程、會議邀請)

如果你想在 ASP.NET Web 應用程式中產生 .ics 讓使用者下載,Ical.Net 幾乎是最佳選擇。



WebApplication1

正在安裝:

System.Buffers.4.6.0
System.Numerics.Vectors.4.6.0
System.Runtime.CompilerServices.Unsafe.6.1.0
NodaTime.3.2.2
System.Memory.4.6.0
Portable.System.DateTimeOnly.9.0.0
Ical.Net.5.1.0




********************************************************************************

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <h2>產生 iCalendar (.ics) 範例</h2>
            <asp:Button ID="btnGenerateICS" runat="server" Text="下載 .ics 檔" 
                OnClick="btnGenerateICS_Click" />
    </form>
</body>
</html>

Default.aspx.cs

using Ical.Net.CalendarComponents;
using Ical.Net.DataTypes;
using Ical.Net.Serialization;
using System;
using System.Text;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnGenerateICS_Click(object sender, EventArgs e)
        {
            // 使用 UTC 時間(必須)
            DateTime utcNow = DateTime.UtcNow;
            var start = new CalDateTime(utcNow.AddHours(1)); // 正確
            var end = new CalDateTime(utcNow.AddHours(2));   // 正確

            // 建立事件
            var calendarEvent = new CalendarEvent
            {
                Summary = "測試事件",
                Description = "Ical.Net 測試 .ics",
                Location = "台北市政府",
                DtStart = start,
                DtEnd = end,
                DtStamp = new CalDateTime(utcNow),
                Uid = Guid.NewGuid().ToString()
            };

            // 建立行事曆並加入事件
            var calendar = new Ical.Net.Calendar();
            calendar.Events.Add(calendarEvent);

            // 序列化為 .ics
            var serializer = new CalendarSerializer();
            string serializedCalendar = serializer.SerializeToString(calendar);

            // 輸出為 .ics 檔案
            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "text/calendar";
            Response.ContentEncoding = Encoding.UTF8;
            Response.AddHeader("Content-Disposition", "attachment;filename=event.ics");
            Response.Write(serializedCalendar);
            Response.End();
        }
    }
}


同類元件比較

元件 優點 缺點
Ical.Net 🌟開源、活躍維護中
🌟支援完整 RFC 5545 標準
🌟可寫入和解析 .ics
⚠️學習曲線稍高
⚠️缺乏 GUI 控制元件
DDay.iCal(Ical.Net 前身) ✅老牌函式庫,支援 RFC 標準
✅功能完整
❌已停止維護(最後更新 2013)
❌相容性差於新版本 .NET
Microsoft.Office.Interop.Outlook ✅整合 Outlook 強大功能(提醒、同步)
✅可存取 Outlook 所有日曆物件
❌需安裝 Outlook
❌無法部署到伺服器或無 Outlook 的環境
Calendar .NET(UI 控制元件) ✅內建月曆介面
✅可直接與使用者互動
❌僅限 WinForms
❌不支援標準 iCalendar 格式

(完)

相關



[研究]IIS for Windows Server 2019 所有版本號碼

[研究]IIS for Windows Server 2019 所有版本號碼

2025-07-29

請列出 IIS for Windows Server 2019 所有版本 ? 是做完哪個年 ? 月 ? Windows Update 後更新的,你回答的資料來源 ?

ChatGPT 說:

Windows Server 2019 初始 RTM 版本於 2018 年 10 月 2 日發布,後因問題延後至 2018 年 11 月 13 日重新推出,這時的 IIS 版本為 10.0.17763.1。之後所有累積更新都屬於此主版本,僅更新次級 build 號碼。

https://learn.microsoft.com/zh-tw/windows/release-health/windows-server-release-info

(完)


2025年7月28日 星期一

[研究]關閉 Wi ndows Update「允許從其他電腦下載」

[研究]關閉 Wi ndows Update「允許從其他電腦下載」 

2025-07-28

Windows Update =>進階選項 => 傳遞最佳化 => 「允許從其他電腦下載」關閉

【Windows 10 22H2】








(完)

2025年7月25日 星期五

[研究]政府電子採購網-共同供應契約 和 資訊服務採購網 差異 ?

[研究]政府電子採購網-共同供應契約 和 資訊服務採購網 差異 ?

2025-07-25

政府電子採購網-共同供應契約
https://web.pcc.gov.tw/pis/prac/downloadGroupClient/readDownloadGroupClient?id=42000000#

政府電子採購網-共同供應契約(適用機關)
https://web.pcc.gov.tw/qdcs/trainingIndex/gtrain13

資訊服務採購網
https://www.cloudmarketplace.org.tw/
右上角可以輸入關鍵字,例如輸入 Office 365,妳會看到一堆;沒有帳號密碼,無法查共契價格

114年第一次電腦軟體共同供應契約採購-套裝軟體(1140201)決標資料
「廠牌」輸入 "Microsoft",「品名」輸入 "Microsoft 365"
Microsoft 365 Apps 企業版(每年訂閱) 契約價 5049
Microsoft 365 Copilot(一年計價) 契約價 12,294
Microsoft 365 E5 Security 零信任標準安全加值(一人版授權一年)
Microsoft 365 E5 合規性(授權一年)
教職員版 Microsoft 365 Apps(一年計價)

「廠牌」輸入 "Microsoft",「品名」輸入 "Teams"
沒有,沒賣

【政府電子採購網-共同供應契約 和 資訊服務採購網 差異 ?】

ChatGPT 說:
以下是 「政府電子採購網-共同供應契約」(以下簡稱「共同供應契約」)與 「資訊服務採購網」(又稱「雲市集」)的主要差異比較,已整理成表格:
項目 政府電子採購網 - 共同供應契約 (PCC) 資訊服務採購網(雲市集 / Cloud Marketplace)
網站網址 PCC共同供應契約 Cloud Marketplace
主辦單位 政府採購相關主管機關(如:行政院公共工程委員會) 國家發展委員會(與工業技術研究院合作)
對象 各級政府機關、學校、公營事業機構 各級政府機關
主要內容 固定品項、固定價格、共通性商品(如:電腦、印表機、桌椅等) 資訊服務、軟體即服務(SaaS)、雲端服務(如系統整合、資安服務、AI等)
採購模式 採購流程簡化,可直接下訂單(「免招標」之制度化範例) 政府機關可透過平台選擇資訊服務廠商進行需求洽談與採購
定價方式 契約定價(由得標廠商統一報價並簽訂契約) 平台刊載服務價格、也可能依案議價或透過簡易比價
適用法規 政府採購法之下的共同供應契約規範 政府採購法,但提供資訊服務採購的彈性機制
服務範圍 資產型採購(硬體、固定品項)為主 資訊與雲端服務類採購(如開發、資安、分析等)
範例項目 桌上型電腦、筆記型電腦、影印機、投影機、會議桌椅等 AI分析系統建置、網站建置、資訊安全健診、雲端備援服務、資料治理

🧩 總結建議:
  • 若您的採購需求是 「標準化商品(硬體/通用設備)」 → 適用 共同供應契約
  • 若需求是 「客製化資訊服務或雲端服務(軟體/開發/資安等)」 → 適用 資訊服務採購網(雲市集)
(完)

[研究]共通契約賣的 Microsoft 軟體或服務,為何比微軟官方公開網站的更貴 ?

[研究]共通契約賣的 Microsoft 軟體或服務,為何比微軟官方公開網站的更貴 ?

2025-07-25

共通契約賣的 Microsoft 軟體或服務,為何比微軟官方公開網站的更貴 ?

ChatGPT 說:

這是一個常見但很合理的問題。表面上看,「政府共同供應契約」或「共通契約」採購 Microsoft 軟體或雲端服務(如 Microsoft 365、Office 2021、Windows 等)有時價格比微軟公開網站還高,原因可能包括以下幾點:

📌 1. 官方網站價格是「個人或小型商業用戶」價格

  • 微軟官網上的定價(如 Microsoft 365 Personal/Family 或 Business Standard)多為訂閱制且不含稅,也未考慮企業內部部署、授權管理、技術支援等需求。
  • 共通契約多為政府/企業大量授權版(Volume Licensing),包括:
    • 可轉移授權(例如離職員工釋出的授權可再用)
    • 內部 IT 部署支援
    • 法規符合性保證(如 ISO、資安規範)

📌 2. 共通契約的報價包含多項「附加價值」

項目 共通契約 微軟官網
授權型態 企業授權、大量授權 個人、小型商用訂閱
技術支援 通常含 1~3 年技術支援 通常需額外付費或無
驗收/開發票 可開統一發票,政府機關能報帳 無法開電子發票報帳
授權轉移性 有可能支援 幾乎無(個人授權)
採購方式 可經由簽約代理商協助 自行線上刷卡購買

📌 3. 共通契約廠商有行政與合約責任成本

加入共通契約的廠商需配合政府:

  • 繳納保證金
  • 配合「最有利標」與 最低標限制
  • 承擔延遲交貨或合約違約責任

這些都會反映在報價成本中。


📌 4. 帳務模式與合約保障不同

  • 微軟官網的服務屬「個人服務條款」,無法針對政府機關/法人開立正式合約或提供資料主權保證。
  • 共通契約透過代理商或 SI 業者提供「合約保障」,如 SLA、資安承諾、主機位置規範(如 Microsoft Azure 台灣區資料中心)。


📌 5. 可能搭配代理商維運服務

  • 代理商可能整合:
    • 客製化 AD 整合
    • 混合部署(On-prem + Cloud)
    • 每年定期教育訓練與技術支援
  • 這些都比單純購買一組序號或雲端帳號來得有價值。

✅ 總結

雖然共通契約價格可能高於官網售價,但它提供的是企業級授權、合約保障與完整技術支援服務,更符合政府與法人單位的法規、流程與長期管理需求。

(完)

[研究]Microsoft 365、Office 365、Copilot、Teams採購

[研究]Microsoft 365、Office 365、Copilot、Teams採購

2025-07-25

微軟 把事情搞的太複雜了:買B軟體還要先買A軟體,而且A軟體還不是任何等級皆可買B軟體;

原先規劃的人查的是微軟公開網站的產品和價格;

採購相關人又要求先查共契,認為價格較低;

共契不是甚麼都有,價格可能更貴;

預算估的不夠。

Microsoft 365 和Office 365 實際上是同一個東西,只不過在名稱上有所不同。 Microsoft 365 是Office 365 的新名稱,保留了原有的訂閱服務和功能,並增加了額外的雲端服務和功能。 簡單來說,Office 365 已經被Microsoft 365 取代。 

********************************************************************************

所有 Microsoft 365 (家庭使用者/商務用、家用/個人、年付/月付、商務版/家用版/企業版、含/不含Teams、)
https://www.microsoft.com/zh-tw/microsoft-365/buy/compare-all-microsoft-365-products

Microsoft 365 商務標準版
https://www.microsoft.com/zh-tw/microsoft-365/business/microsoft-365-business-standard

Microsoft 365 商務標準版 (不含 Teams方案)
https://www.microsoft.com/zh-tw/microsoft-365/business/no-teams-plans-and-pricing

Microsoft 365 Apps 企業版,NT$440.00 使用者/月,按年付費
https://www.microsoft.com/zh-tw/microsoft-365/enterprise/microsoft-365-apps-for-enterprise-product?utm_source=chatgpt.com&activetab=pivot:%E6%A6%82%E8%A7%80tab

Microsoft 365 Copilot Chat 和 Microsoft 365 Copilot
https://www.microsoft.com/zh-tw/microsoft-365/copilot

Microsoft Teams 基本版、Microsoft 365 商務基本版 (含 Teams)、Microsoft 365 商務標準版 (含 Teams)、Microsoft 365 商務基本版 (不含 Teams)、Microsoft 365 商務標準版 (不含 Teams)

Microsoft Teams 企業版 NT$170.00 使用者/月,按年付費,每年 NT$170 * 12 = 2040
https://www.microsoft.com/zh-tw/microsoft-teams/enterprise

********************************************************************************

Microsoft 365 商務標準版 NT$400.00 使用者/月,按年付費,每年 NT$4800
https://www.microsoft.com/zh-tw/microsoft-365/business/microsoft-365-business-standard?activetab=pivot:%E6%A6%82%E8%A7%80tab
Microsoft 365 Copilot 以附加元件的形式提供。






注意2點,
* Microsoft 365 Copilot 以附加元件的形式提供。
* 選擇包含或不含 Microsoft Teams 的方案。 查看不含 Teams 的方案

以附加元件的形式提供 是指要另外購買。

**********

注意,
[4] Microsoft 365 Copilot 可能不適用於所有市場和語言版本。若要購買,客戶必須擁有企業用或商務用的合格方案。


注意,購買 Microsoft 365 Copilot 需要合格的 Microsoft 365 方案單獨授權。


符合使用 Microsoft 365 Copilot 資格的先決條件是甚什麼?
若要獲得資格,客戶必須擁有下列其中一種產品授權:
  • Microsoft 365 Apps 企業版或 Microsoft 365 Apps 商務版
  • Microsoft 365 商務基本版、商務標準版或商務進階版
  • Microsoft 365 E3、E5、F1 或 F3
  • Office 365 E1、E3、E5 或 F3
  • Exchange Online Kiosk、方案 1 或 方案 2
  • 商務用 OneDrive 方案 1 或方案 2
  • SharePoint Online 方案 1 或方案 2
  • Teams 基本版或 Teams 企業版
  • 這些方案中不含 Teams 的版本
**********

Microsoft 365 Copilot Chat 和 Microsoft 365 Copilot
https://www.microsoft.com/zh-tw/microsoft-365/copilot#tabs-pill-bar-oc498c_tab0


**********
Microsoft Teams 基本版、Microsoft 365 商務基本版 (含 Teams)、Microsoft 365 商務標準版 (含 Teams)、Microsoft 365 商務基本版 (不含 Teams)、Microsoft 365 商務標準版 (不含 Teams)

Microsoft Teams 企業版 NT$170.00 使用者/月,按年付費,每年 NT$170 * 12 = 2040
https://www.microsoft.com/zh-tw/microsoft-teams/enterprise

https://www.microsoft.com/zh-tw/microsoft-365/business/no-teams-plans-and-pricing



********************************************************************************

查了一堆的結論,目前 Microsoft 365 產品有些包含 Teams,但 Microsoft 365 Copilot 需另外購買:

  • Microsoft Teams 基本版是包含在多數 Microsoft 365 商業版(例如 Microsoft 365 Business Standard、Business Premium)以及企業版(E3、E5)中的,無需額外採購。
  • Microsoft 365 Copilot 是近年才推出的 AI 助理功能,目前多數情況下屬於額外付費的增值服務,尚未全面內建在所有 Microsoft 365 訂閱方案中。

********************************************************************************

Microsoft 365 商務標準版 (不含 Teams) NT$330.00 使用者/月,按年付費,每年 NT$3960

Microsoft 365 Copilot NT$965 使用者/月,按年付費,每年 NT$965*12=11580

Microsoft Teams 企業版 NT$170.00 使用者/月,按年付費,每年 NT$170 * 12 = 2040

Microsoft 365 商務標準版 的 Teams 不可能達到 企業版 等級,所以分開買)

NT$3960 + NT$11580 + NT$2040 = NT$ 17,580

若 12 人,為 17580*12=NT$210,960

********************************************************************************

政府電子採購網-共同供應契約
https://web.pcc.gov.tw/pis/prac/downloadGroupClient/readDownloadGroupClient?id=42000000#

政府電子採購網-共同供應契約(適用機關)
https://web.pcc.gov.tw/qdcs/trainingIndex/gtrain13

資訊服務採購網
https://www.cloudmarketplace.org.tw/
右上角可以輸入關鍵字,例如輸入 Office 365,妳會看到一堆;沒有帳號密碼,無法查共契價格

114年第一次電腦軟體共同供應契約採購-套裝軟體(1140201)決標資料
「廠牌」輸入 "Microsoft",「品名」輸入 "Microsoft 365"
Microsoft 365 Apps 企業版(每年訂閱) 契約價 5049
Microsoft 365 Copilot(一年計價) 契約價 12,294
Microsoft 365 E5 Security 零信任標準安全加值(一人版授權一年)
Microsoft 365 E5 合規性(授權一年)
教職員版 Microsoft 365 Apps(一年計價)

「廠牌」輸入 "Microsoft",「品名」輸入 "Teams"
沒有,沒賣

重新審視

  • Microsoft 365 商務標準版 (不含 Teams) => 共契沒有,是更貴的 "Microsoft 365 Apps 企業版"
  • Microsoft 365 Copilot => 共契有,更貴,12294 > 11580
  • Microsoft Teams 企業版 => 共契沒有

********************************************************************************
ChatGPT 說:(不保證 100%正確)
項目 Microsoft 365 Apps 企業版 Microsoft 365 商務標準版(不含 Teams)
授權對象 企業/機關(E3/E5 授權子集) 中小企業為主(最多 300 帳號)
Office 桌面應用程式 ✅ 有(完整版 Word/Excel/PowerPoint 等) ✅ 有
可安裝裝置數量 最多 5 台 PC/Mac + 5 手機 + 5 平板 同上
Teams ❌ 無 ❌ 無
Exchange (信箱) ❌ 無 ✅ 有(50GB)
OneDrive for Business ✅ 有(1TB) ✅ 有(1TB)
SharePoint / Planner 等協作工具 ❌ 無 ✅ 有
Outlook 桌面版 ✅ 有 ✅ 有
僅限桌面 Office? ✅ 是(幾乎純粹是應用程式) ❌ 否(含雲端服務)
適合情境 已有郵件系統、只需本機 Office 軟體使用者 需中小企業級雲端生產力整合(無 Teams)
可否加入 AD 網域 ✅ 可(適合大型機關環境) ✅ 可,但部分功能偏中小企業級
最大帳號數量限制 無上限 最多 300 個帳號

時機:

需求 適合方案
想要最新版 Office 桌面版,不用 Exchange 郵件 Microsoft 365 Apps 企業版
想要雲端信箱、OneDrive、SharePoint、Outlook 桌面版,但不需 Teams Microsoft 365 商務標準版(不含 Teams)

********************************************************************************
【政府電子採購網-共同供應契約 和 資訊服務採購網 差異 ?】

ChatGPT 說:
以下是 「政府電子採購網-共同供應契約」(以下簡稱「共同供應契約」)與 「資訊服務採購網」(又稱「雲市集」)的主要差異比較,已整理成表格:
項目 政府電子採購網 - 共同供應契約 (PCC) 資訊服務採購網(雲市集 / Cloud Marketplace)
網站網址 PCC共同供應契約 Cloud Marketplace
主辦單位 政府採購相關主管機關(如:行政院公共工程委員會) 國家發展委員會(與工業技術研究院合作)
對象 各級政府機關、學校、公營事業機構 各級政府機關
主要內容 固定品項、固定價格、共通性商品(如:電腦、印表機、桌椅等) 資訊服務、軟體即服務(SaaS)、雲端服務(如系統整合、資安服務、AI等)
採購模式 採購流程簡化,可直接下訂單(「免招標」之制度化範例) 政府機關可透過平台選擇資訊服務廠商進行需求洽談與採購
定價方式 契約定價(由得標廠商統一報價並簽訂契約) 平台刊載服務價格、也可能依案議價或透過簡易比價
適用法規 政府採購法之下的共同供應契約規範 政府採購法,但提供資訊服務採購的彈性機制
服務範圍 資產型採購(硬體、固定品項)為主 資訊與雲端服務類採購(如開發、資安、分析等)
範例項目 桌上型電腦、筆記型電腦、影印機、投影機、會議桌椅等 AI分析系統建置、網站建置、資訊安全健診、雲端備援服務、資料治理

🧩 總結建議:
  • 若您的採購需求是 「標準化商品(硬體/通用設備)」 → 適用 共同供應契約
  • 若需求是 「客製化資訊服務或雲端服務(軟體/開發/資安等)」 → 適用 資訊服務採購網(雲市集)

********************************************************************************
【共通契約賣的 Microsoft 軟體或服務,為何比微軟官方公開網站的更貴 ?】

ChatGPT 說:
共通契約的報價包含多項「附加價值」

項目 共通契約 微軟官網
授權型態 企業授權、大量授權 個人、小型商用訂閱
技術支援 通常含 1~3 年技術支援 通常需額外付費或無
驗收/開發票 可開統一發票,政府機關能報帳 無法開電子發票報帳
授權轉移性 有可能支援 幾乎無(個人授權)
採購方式 可經由簽約代理商協助 自行線上刷卡購買

********************************************************************************

(完)

[研究]寄信 Spam、SPF (Sender Policy Framework)、DMARC、DKIM 疑問

[研究]寄信 Spam、SPF (Sender Policy Framework)、DMARC、DKIM 疑問

2025-07-25

********************************************************************************

mail server 2台

ms1.myCompany.com.tw (Exchange Server),沒有 sys1 帳號,

ms2.myCompany.com.tw (Posfix),有 sys1 帳號,

sys1@myCompany.com.tw 使用 ms2.myCompany.com.tw 寄信,

會有 Spam 或 SPF (Sender Policy Framework) 、DMARC、DKIM、、、等問題?

ChatGPT 說:

是的,會有可能出現 Spam、SPF、DMARC、DKIM 等問題。以下是詳細分析:

🔍 分析寄信過程中可能的驗證問題:

項目狀況分析結果與影響
SPF若 myCompany.com.tw 的 SPF 記錄中沒有包含 ms2 的 IP,收件伺服器會認為該來源不可信。✅ SPF 會驗證失敗 → 信件可能被標示為 Spam 或拒收。
DKIM如果信件有 DKIM 簽章,且 ms2 伺服器有設定 DKIM,則還可能通過。✅ 若 DKIM 設定正確可加分,但不保證不被視為假冒。
DMARCDMARC 檢查 SPF/DKIM 是否與 From 網域一致(即 From: sys1@myCompany.com.tw)。❌ 若 SPF 或 DKIM 其中之一沒過,或網域不一致 → 驗證失敗。
Reverse DNS / PTRms2 的 IP 如果沒有對應正確的 hostname(如 pmail.myCompany.com.tw),會被扣分。⚠️ 有可能被 Spam filter 懷疑為不可信發信來源。
Exchange 未有此帳號雖然不是直接的寄送驗證條件,但若 MS1 是主機,MS2 僅為 relay,卻假冒 From → 嚴重偽造風險。⚠️ 收件方可能認為是帳號偽造。

✅ 建議處理方式:

項目建議
SPF 設定在 myCompany.com.tw 的 DNS 中加入 ms2.myCompany.com.tw 的 IP(或主機名)到 SPF 記錄。
DKIM 設定在 ms2 上設定 DKIM 簽章,並將 DKIM 公鑰發布到 DNS。
DMARC 設定設定 DMARC 策略時,考慮使用 p=none 測試;待 SPF/DKIM 都通過後再強化為 p=quarantine 或 reject。
建立專屬子網域發信建議 ms2 使用 sys1@system.myCompany.com.tw 發信,將 system.myCompany.com.tw SPF/DKIM 設好。
不用主網域假冒寄信避免使用主網域帳號(但非主機發送)發信,以免被視為 spoofing 假冒攻擊。

********************************************************************************

有兩台 mail server, ms1.myCompany.com.tw 和 ms2.myCompany.com.tw,

ms1.myCompany.com.tw 是 AD Domain,Exchange Server,辦公對外通訊、收發信件使用;

ms2.myCompany.com.tw 是 Linux 用 Postfix 架設,給一些對外服務系統發信使用;

ms2.myCompany.com.tw 有一帳號 sys1,系統使用 sys1@ms2.myCompany.com.tw 寄信,

(1)狀況1

ms1.myCompany.com.tw 沒有帳號 sys1

(2)狀況2

ms1.myCompany.com.tw 也有帳號 sys1

請問2種況狀,系統使用 sys1@ms2.myCompany.com.tw 寄信,會有 Spam 或 SPF (Sender Policy Framework) 、DMARC、DKIM、、、等問題?

ChatGPT 說:

以下是針對您提供的兩種狀況,分析使用 sys1@ms2.myCompany.com.tw 發信時,是否會遇到 Spam 或 SPF、DKIM、DMARC 驗證問題的比較表:

✅ 各狀況寄信與驗證結果比較表

項目狀況1:ms1 沒有 sys1 帳號狀況2:ms1 有 sys1 帳號
寄信來源ms2.myCompany.com.tw (Postfix)ms2.myCompany.com.tw (Postfix)
寄信帳號sys1@ms2.myCompany.com.twsys1@ms2.myCompany.com.tw
From 網域@ms2.myCompany.com.tw@ms2.myCompany.com.tw
SPF 驗證✅ 若 ms2 IP 有在 ms2.myCompany.com.tw SPF 記錄中就 OK
❌ 若 DNS SPF 記錄未設定正確
同左欄,與 ms1 是否有帳號無關
DKIM 驗證✅ 若 ms2 設定 DKIM 並加上 DNS 公鑰同左欄,與 ms1 無關
DMARC 驗證✅ 若 SPF 或 DKIM 任一通過且 domain aligned
❌ 若 SPF/DKIM 皆失敗或未對齊
同左欄,帳號是否存在 ms1 無關
是否易被判為 Spam⚠️ 若 SPF/DKIM 設錯,或 IP reputation 差,會被標 spam同左欄,帳號在 ms1 是否存在不影響
信件與 AD 整合❌ 因為 ms1 沒有 sys1 帳號,Exchange/AD 不認識此人✅ sys1 是 AD 成員,若未發自 ms1 仍無幫助
SPF Alignment✅ 若 DNS SPF 記錄設定為 ms2 IP 可發送 @ms2.myCompany.com.tw 信件同左欄
DMARC Policy 發揮效果✅ 若 ms2 發信完全符合 SPF 或 DKIM 且對齊同左欄

✅ 總結

項目結論
sys1@ms2.myCompany.com.tw 發信是否會被視為 spam?不一定,取決於 DNS 上 SPF/DKIM/DMARC 的設定正確與否,以及 ms2 的 IP reputation
ms1 是否有 sys1 帳號會影響驗證結果嗎?不會影響 SPF、DKIM、DMARC 驗證,但會影響 Exchange/AD 中信件顯示與回覆地址一致性
建議做法重點在 ms2 所屬 domain 的 DNS 設定是否正確:
1. 為 ms2.myCompany.com.tw 設定 SPF,包含 ms2 的 IP
2. 在 ms2 上簽 DKIM,並在 DNS 公布 DKIM 公鑰
3. 正確設 DMARC,policy 可設為 p=none 初期觀察
4. 確保 ms2 IP 沒有被列入黑名單(如 Spamhaus)

(完)

[研究]如何偵測 Exchange Server 的 單一 mail 大小限制 ?

[研究]如何偵測 Exchange Server  的 單一 mail 大小限制 ?

2025-07-25

如何偵測 Exchange Server  的 單一 mail 大小限制 ? 我不是管理員,只是使用者 ? 有 Freeware 工具 ?或 cmd.exe 或 powershell 下指令 ?

ChatGPT 說:

你想以使用者身分偵測 Exchange Server 的「單一郵件大小限制」(single message size limit),但你不是管理員,權限有限,所以這件事本質上比較困難。因為郵件大小限制通常是 Exchange 管理員在 Server 端設定,使用者本身沒有權限直接查詢。

 4. 建議

  • 最簡單實用的是「寄送超大附件郵件測試」,收取錯誤回信判斷大小限制。
  • 或請你的 Exchange 管理員告知大小限制。
  • 如果你熟悉 telnet,可嘗試 EHLO 測試 SMTP SIZE 參數,但多數 Exchange Server 不會回傳。



(完)

2025年7月24日 星期四

[研究]Firewall 有 Policy 可以區分 IP 來源是否為台灣 ? 準確率 ?

[研究]Firewall 有 Policy 可以區分 IP 來源是否為台灣 ? 準確率 ?

2025-07-24

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

Firewall 有 Policy 可以區分 IP 來源是否為台灣 ? 準確率 ?

ChatGPT 說:

是的,大多數現代的防火牆(Firewall)都可以透過 Policy 規則來區分 IP 來源是否為台灣地區(GeoIP / GeoLocation Filtering)。這種功能通常稱為 Geo-IP Filter 或 Geolocation-based Access Control。

🔐 常見支援 GeoIP 功能的防火牆品牌

Fortinet✅ 是Geo-IP Blocking / Geography Object
Palo Alto✅ 是Region Objects + Security Policies
Sophos✅ 是Country Blocking
Cisco ASA/FTD✅ 是(需配合 FMC)Geolocation objects
Check Point✅ 是IP to Country Mapping
SonicWall✅ 是Geo-IP Filter
pfSense✅(需安裝 MaxMind 等套件)使用 MaxMind GeoIP

🎯 準確率如何?

GeoIP 的準確率依賴於其 IP-to-Country 資料庫來源與更新頻率,常見來源如:

  • MaxMind(GeoLite2、GeoIP2):常用且免費(或付費版更準確)
  • IP2Location
  • Digital Element
  • 內建供應商(如 Fortinet 使用自家資料庫)


一般準確率參考(依 MaxMind 官方說法):

地區國家等級準確率(Country-Level Accuracy)
全球約 99.8%
台灣約 99.8%

但有以下例外或誤差來源:

  • VPN / Proxy / Tor 使用者可能會偽裝 IP 地區。
  • 手機行動網路(特別是漫遊) 常會分配非原居國的 IP。
  • IP Block 被重新分配但資料庫尚未更新。


📌 實務建議

  • 若你要「只允許台灣使用者連入」:可以在防火牆設 GeoIP 規則,允許 TW 國碼。
  • 若你要「阻擋非台灣來源」:加入 deny 除 TW 外的地區。

⚠️ 重要提醒:不可 100% 信任 GeoIP 做安全判斷,因為它可被繞過,例如 VPN、跳板 Proxy。建議結合:

  • 帳號登入限制(如 MFA)
  • 特殊 User-Agent / header 偵測
  • 對登入失敗次數設防爆措施

(完)

相關

[研究]信件主旨開頭被加上 [SPF檢查失敗] 或 [SPF_Check_Fail]

[研究]信件主旨開頭被加上  [SPF檢查失敗] 或 [SPF_Check_Fail]

2025-07-24

信件主旨開頭被加上 [SPF檢查失敗]

ChatGPT 說:

當信件主旨開頭被加上 [SPF檢查失敗],這通常代表:

🔍 什麼是 SPF?

SPF(Sender Policy Framework)是一種電子郵件驗證機制,用來防止 寄件者位址偽造(spoofing)。

它透過檢查寄件者網域 DNS 中的 SPF 記錄,來驗證「寄出這封信的 IP 地址」是否被授權代表該網域發信。


⚠️ 出現 [SPF檢查失敗] 代表什麼?

當你看到主旨被加上 [SPF檢查失敗],代表收信端的郵件系統對這封信做了 SPF 驗證,發現:

  • 信件聲稱來自某個網域(例如 example.com),
  • 但實際寄信的 IP 不在 example.com DNS 設定的 SPF 記錄中,
  • 因此「SPF 驗證失敗」。

這是為了防止垃圾郵件或詐騙信件冒用合法寄件網域。


🧾 常見原因:

  • 寄件伺服器未被正確設定 SPF 記錄:網域管理員忘了加上寄信伺服器的 IP 或第三方郵件服務(如 Mailchimp, Google Workspace 等)。
  • 信件是偽造的或來自垃圾信件來源:詐騙者假冒知名公司或單位的 email 網域。
  • 轉寄(forward)導致 SPF 失敗:某些情況下透過轉寄(例如舊信箱轉寄到新信箱)會導致 SPF 檢查出現問題。


✅ 收信者該怎麼辦?

  • 如果你 不認識這封信的來源,建議不要點擊任何連結或附件。
  • 如果你信任這個寄件人,可請對方檢查他們的 SPF 設定。
  • 企業或政府單位的收信系統,可能會自動加上 [SPF檢查失敗] 來警示使用者。


⚙️ 寄件者該如何修正?   需要 DNS Server 管理員才能設定和解決

  1. 到網域的 DNS 管理介面(例如 DNS 託管在 Cloudflare、AWS Route53...)新增或修改 SPF 記錄。
  2. SPF 記錄範例如下(授權 Google Workspace 發信):v=spf1 include:_spf.google.com ~all
  3. 驗證工具:可用以下網站測 SPF 記錄是否正確:





(完)

[研究]信件主旨開頭被加上 [GSN Suspected Spam]

[研究]信件主旨開頭被加上  [GSN Suspected Spam]

2025-07-24


信件主旨開頭被【政府網際服務網(Government Service Network, GSN)】加上  [GSN Suspected Spam]

ChatGPT 說:

當您的信件主旨被加上 [GSN Suspected Spam],代表這封郵件經過「政府網際服務網(Government Service Network, GSN)」的垃圾郵件過濾系統後,被判定有可能是垃圾郵件(Spam)。

📌 GSN 是什麼?

GSN(Government Service Network)是行政院所建置的政府單位對外電子郵件與網路傳輸的集中管理平台。其中包含垃圾信件過濾、防病毒、內容審查等功能。所有經由 GSN 的信件都會先經過掃描和分析。

⚠️ 為什麼會被標記為 [GSN Suspected Spam]?

常見原因包括:

  1. 寄件者位於可疑 IP 或網段:IP 曾被列入垃圾信件黑名單(RBL,如 Spamhaus、SORBS 等)
  2. 信件內容特徵類似垃圾信件:例如重複關鍵字、過多連結、HTML/JavaScript 過於複雜等
  3. 主旨或內容使用了可疑語句:如「限時優惠」、「點我立即了解」、「帳戶異常」、「發票中獎」等
  4. 信件格式異常:如沒有寄件人顯示名稱、From/Reply-To 不一致、Header 格式錯誤等
  5. 缺少 SPF、DKIM、DMARC 驗證:若您是寄件者,您的網域未設定郵件驗證標準,會增加被判為垃圾信件的機率


🔍 如何確認是 GSN 加上的?

您可以檢查郵件原始標頭(Message Header)中的 Subject: 欄位:

Subject: [GSN Suspected Spam] 原始主旨文字

通常這個 [GSN Suspected Spam] 是由 GSN 自動加上的標籤,不一定表示信件已被擋下,但是警示收件者注意。


✅ 若您是寄件者,如何避免?

  1. 確認寄送主機 IP 是否被列入黑名單:使用工具查詢:https://mxtoolbox.com/blacklists.aspx
  2. 設定 SPF / DKIM / DMARC:建議由 DNS 管理者正確設定以提升信任度
  3. 不要在主旨或內容中出現類似詐騙的語句:少用「免費」、「獎金」、「限時」、「立即點擊」等字眼
  4. 檢查信件格式:確保 MIME 結構正確、HTML 合法、標頭資訊完整


✅ 若您是收件者,要處理這類信件?

  • 可以開啟信件原始標頭分析來源和內容
  • 若經確認是誤判,可向 GSN 所屬單位(如 NCHC 或各部會資訊室)提出申訴或白名單申請。

(完)

[研究]桌上型電腦插入獨立顯示卡後,主機板內建顯示輸出會自動停用

[研究]桌上型電腦插入獨立顯示卡後,主機板內建顯示輸出會自動停用

2025-07-24

環境:聯想Lenovo 90G8桌上型電腦 + 聯想NVIDIA GeForce GT 730 顯示卡

任何桌上型電腦,插入顯示卡後,主機板本身的 HDMI 接口會自動停用 ?這是正常的設計行為?為什麼 ?

ChatGPT 說:

是的,大多數桌上型電腦(尤其是使用 Intel 或 AMD 處理器內建顯示核心的主機板),在插入獨立顯示卡(獨顯)之後,主機板上原本的 HDMI / VGA / DVI 等內建顯示輸出會自動停用,這是一種正常的設計行為,原因如下:

🔧 為什麼會自動停用主機板的 HDMI?

1.預設使用獨立顯示卡提升效能

  • 系統偵測到有獨顯時,會將圖形輸出預設切換到獨顯,因為它通常性能遠優於內建顯示核心(iGPU,如 Intel UHD / AMD Radeon iGPU)。

2.硬體資源衝突與相容性

  • 某些平台(尤其是較舊的主機板或 BIOS 設計)為避免顯示資源衝突,會自動關閉內建顯示核心。

3.電力與散熱考量

  • 停用 iGPU 可以略微降低 CPU 功耗與發熱。


✅ 但有些主機板可以同時啟用兩者(iGPU + dGPU)

某些較新的主機板與 BIOS(尤其是 Intel Z 系列或 AMD B/X 系列)支援多顯示輸出混合模式,可手動設定讓 iGPU(內顯)與 dGPU(獨顯)同時運作,前提是:


要達成「主機板 HDMI + 顯示卡 HDMI 同時輸出」,你需要:

1.BIOS 開啟 iGPU

  • 找到 BIOS 設定中的類似選項:
    Advanced → Chipset → Integrated Graphics → Enabled / Always Enabled
    或:
    IGFX Multi-Monitor → Enabled

2.作業系統支援(如 Windows 多螢幕)

  • 進入 Windows 顯示設定,可看到來自兩張顯示卡的輸出,進行多螢幕佈局。

3.CPU 本身需具備內建顯示核心

例如:

✅ Intel Core i5-12400 有內顯(UHD 730)

❌ AMD Ryzen 5 5600X 沒有內顯(要找 G 結尾的如 5600G)

🔎 總結

問題回答
插入獨顯後主機板 HDMI 會停用?多數情況下會,是正常設計
能不能同時用主機板 HDMI + 顯示卡 HDMI?有些主機板與 BIOS 支援,要手動開啟 iGPU 支援
為何會預設停用?避免資源衝突、提升效能、節能設計

如你使用的是 Lenovo 90G8 桌機(OEM 主機板),則更有可能 BIOS 被限制無法手動開啟 iGPU。OEM 廠商為了穩定性和簡化維修流程,通常不允許 iGPU/dGPU 混用。

(完)


2025年7月21日 星期一

[研究]ASP.NET WebForm, CSP 會導致下面那些 NuGet 套件無法運作 ?

[研究]ASP.NET WebForm, CSP 會導致下面那些 NuGet 套件無法運作 ?

2025-07-21

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

ASP.NET WebForm, CSP 會導致下面那些 NuGet 套件無法運作 ?

  • AngleSharp 0.17.1
  • AngleSharp.Css 0.17.0
  • Antlr 3.5.0.2
  • Aspose.Cells 25.6.0
  • Autofac 8.3.0
  • Autofac.WebApi2 6.1.1
  • Bootstrap.Datepicker 1.8.0.1
  • BouncyCastle.Cryptography 2.6.1
  • ByteSize 2.1.2
  • Chart.js 3.7.1
  • ClosedXML 0.105.0
  • ClosedXML.Parser 2.0.0
  • Common.Logging 3.4.1
  • Common.Logging.Core 3.4.1
  • DocumentFormat.OpenXml 3.3.0
  • DocumentFormat.OpenXml.Framework 3.3.0
  • EFUtilities 1.0.2
  • EntityFramework 6.5.1
  • Enums.NET 5.0.0
  • ExcelDataReader 3.7.0
  • ExcelDataReader.DataSet 3.7.0
  • ExcelNumberFormat 1.1.0
  • ExtendedNumerics.BigDecimal 3000.0.4.132
  • FastMember 1.5.0
  • FastMember.Signed 1.5.0
  • Font.Awesome 5.15.4
  • FontAwesome 4.7.0
  • FreeDataExports 1.1.12
  • FreeSpire.PDF 8.6.0
  • HtmlSanitizer 9.0.876
  • HtmlSanitizer 9.0.886
  • Irony 1.5.3
  • Irony.NetCore 1.1.11
  • JetBrains.Annotations 2024.3.0
  • LinqKit 1.3.8
  • LinqKit.Core 1.2.8
  • LogicExtensions 0.0.3
  • MailKit 4.13.0
  • MathNet.Numerics.Signed 5.0.0
  • Microsoft.AspNet.FriendlyUrls 1.0.2
  • Microsoft.AspNet.FriendlyUrls.Core 1.0.2
  • Microsoft.AspNet.FriendlyUrls.Core.zh-Hant 1.0.2
  • Microsoft.AspNet.Identity.Core 2.2.4
  • Microsoft.AspNet.Identity.Core.zh-Hant 2.2.4
  • Microsoft.AspNet.Identity.EntityFramework 2.2.4
  • Microsoft.AspNet.Identity.EntityFramework.zh-Hant 2.2.4
  • Microsoft.AspNet.Identity.Owin 2.2.4
  • Microsoft.AspNet.Identity.Owin.zh-Hant 2.2.4
  • Microsoft.AspNet.Providers.Core 2.0.0
  • Microsoft.AspNet.Providers.Core.zh-Hant 2.0.0
  • Microsoft.AspNet.ScriptManager.MSAjax 5.0.0
  • Microsoft.AspNet.ScriptManager.WebForms 5.0.0
  • Microsoft.AspNet.Web.Optimization 1.1.3
  • Microsoft.AspNet.Web.Optimization.WebForms 1.1.3
  • Microsoft.AspNet.Web.Optimization.zh-Hans 1.1.3
  • Microsoft.AspNet.Web.Optimization.zh-Hant 1.1.3
  • Microsoft.AspNet.WebApi 5.3.0
  • Microsoft.AspNet.WebApi.Client 6.0.0
  • Microsoft.AspNet.WebApi.Client.zh-Hant 6.0.0
  • Microsoft.AspNet.WebApi.Core 5.3.0
  • Microsoft.AspNet.WebApi.Core.zh-Hant 5.3.0
  • Microsoft.AspNet.WebApi.WebHost 5.3.0
  • Microsoft.AspNet.WebApi.WebHost.zh-Hant 5.3.0
  • Microsoft.Bcl.AsyncInterfaces 9.0.6
  • Microsoft.Bcl.AsyncInterfaces 9.0.7
  • Microsoft.Bcl.Build 1.0.21
  • Microsoft.Bcl.Cryptography 9.0.6
  • Microsoft.Bcl.HashCode 6.0.0
  • Microsoft.CSharp 4.7.0
  • Microsoft.Extensions.DependencyInjection 9.0.6
  • Microsoft.Extensions.DependencyInjection.Abstractions 9.0.6
  • Microsoft.IO.RecyclableMemoryStream 3.0.1
  • Microsoft.NETCore.Platforms 7.0.4
  • Microsoft.Owin 4.2.2
  • Microsoft.Owin.Host.SystemWeb 4.2.2
  • Microsoft.Owin.Security 4.2.2
  • Microsoft.Owin.Security.Cookies 4.2.2
  • Microsoft.Owin.Security.OAuth 4.2.2
  • Microsoft.Web.Infrastructure 2.0.0
  • Microsoft.Win32.Primitives 4.3.0
  • MimeKit 4.13.0
  • Modernizr 2.8.3
  • Modernizr.New 3.4.0
  • Moment.js 2.30.1
  • NETStandard.Library 2.0.3
  • NLog 6.0.1
  • NLog.Schema 6.0.1
  • NPOI 2.7.4
  • NReco.PdfGenerator 1.2.1
  • Newtonsoft.Json 13.0.3
  • Newtonsoft.Json.Bson 1.0.3
  • Npoi.Mapper 6.2.2
  • Oracle.ManagedDataAccess 23.9.0
  • Owin 1.0
  • Portable.BouncyCastle 1.9.0
  • ProDotNetZip 1.20.0
  • RBush 4.0.0
  • RBush.Signed 4.0.0
  • Respond 1.4.2
  • RestSharp 106.15.0
  • RestSharp 112.1.0
  • Select2.js 4.0.13
  • SendGrid 9.29.3
  • SendGrid.CSharp.HTTP.Client 3.4.12
  • SendGrid.SmtpApi 1.4.6
  • SharpZipLib 1.4.2
  • SixLabors.Fonts 1.0.1
  • SixLabors.ImageSharp 3.1.10
  • Swashbuckle 5.6.0
  • Swashbuckle.Core 5.6.0
  • System.AppContext 4.3.0
  • System.Buffers 4.6.1
  • System.Collections 4.3.0
  • System.Collections.Concurrent 4.3.0
  • System.Collections.Immutable 9.0.6
  • System.Collections.Immutable 9.0.7
  • System.Configuration.ConfigurationManager 9.0.6
  • System.Console 4.3.1
  • System.Diagnostics.Debug 4.3.0
  • System.Diagnostics.DiagnosticSource 9.0.6
  • System.Diagnostics.Tools 4.3.0
  • System.Diagnostics.Tracing 4.3.0
  • System.Formats.Asn1 9.0.6
  • System.Formats.Asn1 9.0.7
  • System.Globalization 4.3.0
  • System.Globalization.Calendars 4.3.0
  • System.IO 4.3.0
  • System.IO.Compression 4.3.0
  • System.IO.Compression.ZipFile 4.3.0
  • System.IO.FileSystem 4.3.0
  • System.IO.FileSystem.Primitives 4.3.0
  • System.IO.Packaging 9.0.6
  • System.IO.Packaging 9.0.7
  • System.IO.Pipelines 9.0.6
  • System.IO.Pipelines 9.0.7
  • System.IO.UnmanagedMemoryStream 4.3.0
  • System.Linq 4.3.0
  • System.Linq.Dynamic.Core 1.6.6
  • System.Linq.Expressions 4.3.0
  • System.Linq.Queryable 4.3.0
  • System.Memory 4.6.3
  • System.Net.Http 4.3.4
  • System.Net.Primitives 4.3.1
  • System.Net.Sockets 4.3.0
  • System.Numerics.Vectors 4.6.1
  • System.ObjectModel 4.3.0
  • System.Reflection 4.3.0
  • System.Reflection.Emit.ILGeneration 4.7.0
  • System.Reflection.Emit.Lightweight 4.7.0
  • System.Reflection.Extensions 4.3.0
  • System.Reflection.Primitives 4.3.0
  • System.Resources.ResourceManager 4.3.0
  • System.Runtime 4.3.1
  • System.Runtime.CompilerServices.Unsafe 6.1.2
  • System.Runtime.CompilerServices.Unsafe 7.0.0-preview.2.22152.2
  • System.Runtime.Extensions 4.3.1
  • System.Runtime.Handles 4.3.0
  • System.Runtime.InteropServices 4.3.0
  • System.Runtime.InteropServices.RuntimeInformation 4.3.0
  • System.Runtime.Numerics 4.3.0
  • System.Security.AccessControl 6.0.1
  • System.Security.Cryptography.Algorithms 4.3.1
  • System.Security.Cryptography.Encoding 4.3.0
  • System.Security.Cryptography.Pkcs 9.0.6
  • System.Security.Cryptography.Primitives 4.3.0
  • System.Security.Cryptography.X509Certificates 4.3.2
  • System.Security.Cryptography.Xml 9.0.6
  • System.Security.Permissions 9.0.6
  • System.Security.Principal.Windows 5.0.0
  • System.Text.Encoding 4.3.0
  • System.Text.Encoding.CodePages 9.0.6
  • System.Text.Encoding.CodePages 9.0.7
  • System.Text.Encoding.Extensions 4.3.0
  • System.Text.Encodings.Web 9.0.6
  • System.Text.Encodings.Web 9.0.7
  • System.Text.Json 9.0.6
  • System.Text.Json 9.0.7
  • System.Text.RegularExpressions 4.3.1
  • System.Threading 4.3.0
  • System.Threading.Tasks 4.3.0
  • System.Threading.Tasks.Extensions 4.6.3
  • System.Threading.Tasks.Parallel 4.3.0
  • System.Threading.Timer 4.3.0
  • System.ValueTuple 4.5.0
  • System.ValueTuple 4.6.1
  • System.Xml.Linq 3.5.21022.801
  • System.Xml.ReaderWriter 4.3.1
  • System.Xml.XDocument 4.3.0
  • WebActivatorEx 2.2.0
  • WebGrease 1.6.0
  • WkHtmlToPdf 1.0.2
  • X.PagedList 10.5.7
  • XLParser 1.7.5
  • ZString 2.6.0
  • bootstrap 3.4.1
  • bootstrap 5.3.7
  • elmah 1.2.2
  • elmah.corelibrary 1.2.2
  • html5-shiv 3.7.3
  • icheck-bootstrap 3.0.1
  • jQuery 3.7.1
  • jQuery-datetimepicker 2.4.5
  • jQuery.UI.Combined 1.14.1
  • jQuery.Validation 1.21.0
  • js-cookie 2.2.1
  • popper.js 1.16.1
  • starkbank-ecdsa 1.3.3
  • vue 2.6.11

********************************************************************************

ChatGPT 說:

在 ASP.NET WebForm 專案中啟用 CSP(Content Security Policy) 後,會影響到 執行期會載入 JS/CSS 或執行動態 script/style 相關功能 的 NuGet 套件,特別是以下幾種類型會受限:

✅ 不會受 CSP 影響的 NuGet 套件類型(安全):

這些套件大多為:

  • 後端函式庫(處理資料、壓縮、加密、Excel、PDF)
  • 非動態載入資源、不執行 script 的前端套件
  • Entity Framework、ASP.NET Identity、NLog 等非 UI 相依元件

✅ 例子:

  • Aspose.Cells
  • ClosedXML
  • ExcelDataReader
  • EntityFramework
  • NPOI
  • Autofac
  • Newtonsoft.Json
  • MailKit / MimeKit
  • System.*、Microsoft.* 類別庫(非 WebResource)

⚠️ 可能會受 CSP 限制的 NuGet 套件類型(需注意)

這些元件若在前端透過 JS 動態載入、執行 inline script、style、eval、或使用 <script src="..."> 引用外部資源,在 CSP 預設 script-src 'self' 限制下會 被封鎖執行:

☑️ 建議設定:

  • CSP 中加入 unsafe-inline 或指定可信任的 CDN 來源(如 https://cdn.jsdelivr.net)

🔻 具體列出受影響的套件(⚠️ 若 CSP 嚴格,會壞掉或無法顯示)

套件問題原因
Bootstrap.Datepicker使用 inline script 及外部 CSS
Chart.js動態產生 <canvas> + JS 渲染
Font.Awesome, FontAwesome有時從 CDN 載入字型(需 font-src)
Modernizr, Modernizr.New使用 inline script
Moment.js若從外部載入或使用 eval
Select2.js有 inline JS 和外部資源
Respond動態 CSS 載入
jQuery, jQuery-UI, jQuery-datetimepicker, jQuery.Validation若用 inline JS 或外部載入
vue預設模板會包含 eval 或 inline JS
js-cookie, popper.js使用外部 CDN 時會被阻擋
bootstrap預設範例會用 inline script(如 tooltip)
html5-shiv, icheck-bootstrap需動態加載或 inline style

✅ 部分前端套件若本地化引用、無 inline JS 可正常運作

例如:

bootstrap 3.4.1 與 jQuery 若為本地 .js 檔案引用 + 無 eval、無 inline script,加上:

script-src 'self';

style-src 'self';

→ 可運作

但若套件包含像這樣的 <script>$('#abc').tooltip()</script> 則會因 CSP 阻擋而失效,需加上:

script-src 'self' 'unsafe-inline';

💡 建議做法:

  • 嚴格 CSP: 不建議使用含 inline script/style 的 UI 套件
  • 放寬 CSP: Global.asax.cs加上:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.Headers.Add("Content-Security-Policy",
        "default-src 'self'; " +
        "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://unpkg.com; " +
        "style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://fonts.googleapis.com https://cdnjs.cloudflare.com; " +
        "font-src 'self' https://fonts.gstatic.com data:; " +
        "img-src 'self' data: https://cdn.jsdelivr.net; " +
        "connect-src 'self'; " +
        "frame-src 'self'; " +
        "object-src 'none'; " +
        "base-uri 'self'; " +
        "form-action 'self';"
    );
}

📦 常見 CDN 對應參考

  • Bootstrap / jQuery / FontAwesome / Chart.js https://cdn.jsdelivr.net, https://cdnjs.cloudflare.com
  • Select2 https://cdnjs.cloudflare.com
  • Vue https://unpkg.com
  • Google Fonts https://fonts.googleapis.com, https://fonts.gstatic.com

(完)

相關

[研究]ASP.NET , WebForm, Nuget 哪些套件會因為 CSP 防護而無法運作 ?

[研究]ASP.NET , WebForm, Nuget 哪些套件會因為 CSP 防護而無法運作 ?

2025-07-21

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

ChatGPT 說:

在 ASP.NET WebForm 中,導入 CSP(Content-Security-Policy) 是一個強化網站安全性的好做法,但它也可能會「阻擋」或「影響某些 NuGet 套件的功能」,尤其是那些會產生或使用 inline script/style、eval()、第三方 CDN 資源 的套件。

以下是一些 常見在 WebForm 中使用、可能會因為 CSP 設定而無法正常運作或需要額外設定的 NuGet 套件類型與實例:

🔶 1. WYSIWYG 編輯器套件

這類套件多數會使用 inline JavaScript 與第三方外部資源(如 Google Fonts、CDN script)。

  • CKEditor
  • TinyMCE
  • Summernote
  • Quill

影響:

  • 被 CSP 阻擋 inline script (unsafe-inline)
  • 外部資源(如 cdn.jsdelivr.net, cdnjs.cloudflare.com)被 CSP 限制

🔶 2. 圖表/資料視覺化套件

例如:

  • Chart.js
  • Highcharts
  • Google Charts

影響:

  • 動態產生 inline <script>、<style> 被 CSP 阻擋
  • 使用 Google 字體、圖示會被 CSP 阻擋

🔶 3. 前端 UI 套件 / 元件庫

  • Bootstrap(若透過 CDN 載入)
  • jQuery UI
  • FontAwesome
  • Toastr.js(通知訊息)
  • SweetAlert2(彈窗元件)

影響:

  • 若 CSP 未允許對應的 CDN,無法載入資源
  • style-src、script-src 未允許 unsafe-inline,將導致樣式失效、JavaScript 功能失效

🔶 4. 驗證或安全工具

例如:

  • Google reCAPTCHA v2/v3
  • hCaptcha

影響:

  • 需要允許 script-src 和 frame-src 加入 Google 的網域如:
    • https://www.google.com
    • https://www.gstatic.com
    • https://www.recaptcha.net

🔶 5. SPA 或 MVVM 類型的前端工具(混合使用)

  • Knockout.js
  • AngularJS (老版本)
  • React(如果 SSR 或 Hybrid 嵌入 WebForm)

影響:

  • 若套件內部使用 eval() 或 new Function(),需 CSP 加入 unsafe-eval 才能運作
  • 無法插入 <script>,或腳本被阻擋

🔶 解決方式(針對 CSP 衝突):

問題解法
inline <script> 被擋加入:script-src 'self' 'unsafe-inline'(不建議,但必要時可)
第三方資源被擋加入對應來源,例如 script-src https://cdn.jsdelivr.net
Google 字體被擋加入:style-src https://fonts.googleapis.com 和 font-src https://fonts.gstatic.com
使用 eval() 的 JS 被擋加入:script-src 'unsafe-eval'(非常不建議,會大幅降低安全性)
iframe 被擋加入:frame-src https://www.google.com

✅ 實際範例(最小允許設定)

Response.Headers.Add("Content-Security-Policy",
    "default-src 'self'; " +
    "script-src 'self' 'unsafe-inline' https://www.google.com https://www.gstatic.com https://cdn.jsdelivr.net; " +
    "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; " +
    "font-src 'self' https://fonts.gstatic.com; " +
    "img-src 'self' data:; " +
    "frame-src https://www.google.com;"
);

結論:

若你在 WebForm 使用以下類型的 NuGet 套件:

  • 動態產生 script 的元件
  • 外部資源依賴重的前端工具(WYSIWYG 編輯器、圖表、驗證工具)
  • 引入第三方字型、CDN script

那麼在未調整 CSP 前,這些功能極可能會失效。

警告:只要CSP設定了任何排除,HCL AppScan掃描結果就會報告系統有 CSP 弱點。不排除,一堆常用功能套件可能癱瘓掉。

(完)

相關

2025年7月18日 星期五

[研究]ASP.NET WebForm 網站被 HCL AppScan 10.18.1 報告【發現不存在網域的鏈結】弱點,如何處理?

[研究]ASP.NET WebForm 網站被 HCL AppScan 10.18.1 報告【發現不存在網域的鏈結】弱點,如何處理?

2025-07-18




實體: (Link)
風險: 有可能說服無經驗而易受騙的使用者提供機密性資訊,如:使用者名稱、密碼、信用卡號碼、社會保險號碼等等
原因: Web 應用程式包含不存在網域的鏈結
修正: 請從網站移除不存在的網域
差異:
推論: AppScan 發現外部網站的鏈結,但無法解析它
********************************************************************************

經查,只不過是超連結網址不再有效而已,嚴重性列【高】,AppScan 10.18.1 太過份了,對於非技術的業務單位 or 業主,會覺得系統的怎會有這麼嚴重的問題。

(完)





[研究]ASP.NET WebForm網站被 HCL AppScan 10.8報告 __AntiXsrfToken (Cookie)【參數指令注入】弱點

[研究]ASP.NET WebForm網站被 HCL AppScan 10.8報告 __AntiXsrfToken (Cookie) 【參數指令注入】弱點

2025-07-18

HCL AppScan Standard 10.8.0 建立 

********************************************************************************

實際到受測主機測試


✅ DNS 查詢會發送到內部 DNS Server 172.16.xxxx.xxx

❌ 內部 DNS Server 未能將此查詢往外轉送,或被網路政策擋下

根據這些事實,在這種網路架構下:

AppScan 嘗試觸發 SSRF、Command Injection、外部連線等弱點時,可能無法實際送出封包

因為:主機連 DNS 查詢都 timeout,就不可能觸發成功的 OOB(Out-of-Band)漏洞


🔍 AppScan 報告是否為誤判?

本次掃描報告中出現的 OOB 連線測試(如 v3-ping-xxx.adns.appsechcl.com),實測本主機無法進行外部 DNS 查詢(內部 DNS 無法解析外部域名),可合理判定為 誤判(False Positive)。

(完)