2025年11月10日 星期一

[研究]GCB,IIS,httpOnlyCookies可否設定為 True,自動判斷讀取的 Cookie 名稱是否是 ASP.NET 系統 Cookie

[研究]GCB,IIS,httpOnlyCookies可否設定為 True,自動判斷讀取的 Cookie 名稱是否是 ASP.NET 系統 Cookie

2025-11-10

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

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

PowerShell

# 設定專案根目錄
$projectRoot = "C:\YourProjectPath"  # <-- 改成你的專案路徑

# 支援的檔案類型
$extensions = @("*.js", "*.aspx", "*.cshtml", "*.html")

# 建立空的結果集合
$results = @()

foreach ($ext in $extensions) {
    $files = Get-ChildItem -Path $projectRoot -Recurse -Include $ext -ErrorAction SilentlyContinue

    foreach ($file in $files) {
        # 讀取檔案內容,每行為字串陣列
        $lines = Get-Content $file.FullName -ErrorAction SilentlyContinue

        foreach ($line in $lines) {
            if ($line -match "document\.cookie") {
                $results += [PSCustomObject]@{
                    File = $file.FullName
                    LinePreview = $line.Trim()
                }
            }
        }
    }
}

# 輸出結果
if ($results.Count -eq 0) {
    Write-Host "專案中未發現使用 document.cookie 的程式碼。"
} else {
    Write-Host "專案中可能受 HttpOnlyCookies 影響的程式碼:"
    $results | Format-Table -AutoSize
}

# 可選:將結果輸出到 CSV
$results | Export-Csv -Path "$projectRoot\CookieScanResults.csv" -NoTypeInformation
Write-Host "結果已輸出至 CookieScanResults.csv"

下圖,建議用 Notepad++ 存檔,中文字會變成亂碼。

下圖,建議用 Notepad (記事本) 存檔,用 ANSI、UniCode、UTF-8皆可。


方案1實際測試結果

其實之前已經把整個 packages.config 中的套件問過一次 ChatGPT,說都沒問題,實際用 PowerShell 程式測,httpOnlyCookies照 GCB 設定為 True, 可能導致 js-cookie 2.2.1 套件功能異常;實際檢視,發現確實有變更 document.cookie 值得地方,所以 httpOnlyCookies 不可以設定為 True。

FileLinePreview
D:\WebSolution1\packages\js-cookie.2.2.1\content\Scripts\js-cookie\js.cookie-2.2.1.min.js!function(a){var b;if("function"==typeof define&&define.amd&&(define(a),b=!0),"object"==typeof exports&&(module.exports=a(),b=!0),!b){var c=window.Cookies,d=window.Cookies=a();d.noConflict=function(){return window.Cookies=c,d}}}(function(){function a(){for(var a=0,b={};a
D:\WebSolution1\packages\js-cookie.2.2.1\content\Scripts\js-cookie\js.cookie.jsreturn (document.cookie = key + '=' + value + stringifiedAttributes);
D:\WebSolution1\packages\js-cookie.2.2.1\content\Scripts\js-cookie\js.cookie.jsvar cookies = document.cookie ? document.cookie.split('; ') : [];
D:\WebSolution1\WebApplication1\Scripts\js-cookie\js.cookie-2.2.1.min.js!function(a){var b;if("function"==typeof define&&define.amd&&(define(a),b=!0),"object"==typeof exports&&(module.exports=a(),b=!0),!b){var c=window.Cookies,d=window.Cookies=a();d.noConflict=function(){return window.Cookies=c,d}}}(function(){function a(){for(var a=0,b={};a
D:\WebSolution1\WebApplication1\Scripts\js-cookie\js.cookie.jsreturn (document.cookie = key + '=' + value + stringifiedAttributes);
D:\WebSolution1\WebApplication1\Scripts\js-cookie\js.cookie.jsvar cookies = document.cookie ? document.cookie.split('; ') : [];

方案2實際測試結果, httpOnlyCookies 不可以設定為 True,受影響套件 Modernizr3.4.0

FileLinePreview
D:\WebSolution2\WebApplication1\Scripts\modernizr-3.4.0.js// try..catch because some in situations `document.cookie` is exposed but throws a
D:\WebSolution2\WebApplication1\Scripts\modernizr-3.4.0.jsdocument.cookie = 'cookietest=1';
D:\WebSolution2\WebApplication1\Scripts\modernizr-3.4.0.jsvar ret = document.cookie.indexOf('cookietest=') != -1;
D:\WebSolution2\WebApplication1\Scripts\modernizr-3.4.0.jsdocument.cookie = 'cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';
D:\WebSolution2\packages\Modernizr.New.3.4.0\Content\Scripts\modernizr-3.4.0.js// try..catch because some in situations `document.cookie` is exposed but throws a
D:\WebSolution2\packages\Modernizr.New.3.4.0\Content\Scripts\modernizr-3.4.0.jsdocument.cookie = 'cookietest=1';
D:\WebSolution2\packages\Modernizr.New.3.4.0\Content\Scripts\modernizr-3.4.0.jsvar ret = document.cookie.indexOf('cookietest=') != -1;
D:\WebSolution2\packages\Modernizr.New.3.4.0\Content\Scripts\modernizr-3.4.0.jsdocument.cookie = 'cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';

方案3實際測試結果,同方案2。

方案4實際測試結果,未發現受影響套件。

(完)

相關

沒有留言:

張貼留言