Gejala
Setelah Anda menginstal pembaruan keamanan bulan Oktober berikut untuk Microsoft SharePoint Server, beberapa skenario alur kerja SharePoint 2010 Microsoft mungkin diblokir. Selain itu, tag kejadian "6ksbk" dicatat dalam log SharePoint Unified Logging System (ULS).
-
Deskripsi pembaruan keamanan untuk SharePoint Foundation 2013: 11 Oktober 2022 (KB5002284)
-
Deskripsi pembaruan keamanan untuk SharePoint Enterprise Server 2016: 11 Oktober 2022 (KB5002287)
-
Deskripsi pembaruan keamanan untuk SharePoint Server 2019: 11 Oktober 2022 (KB5002278)
-
Deskripsi pembaruan keamanan untuk SharePoint Server Edisi Berlangganan: 11 Oktober 2022 (KB5002290)
Penyebab
Untuk memperkuat keamanan alur kerja SharePoint, SharePoint kini hanya mendukung pengodean karakter UTF-8 untuk file .xoml alur kerja.
Catatan: Alat alur kerja SharePoint seperti SharePoint Designer, Microsoft Visual Studio, dan Nintex membuat file .xoml alur kerja menggunakan pengodean karakter UTF-8 secara default. Pelanggan tidak akan terpengaruh oleh peningkatan keamanan ini kecuali mereka telah mengedit file .xoml alur kerja mereka secara manual dan mengonversinya menjadi pengodean karakter yang berbeda. Masalah ini didokumentasikan dalam artikel KB ini tentang kemungkinan yang sangat jarang terjadi bahwa pelanggan mungkin telah memilih untuk melakukan hal ini.
Solusi:
Jika Anda telah mengedit file .xoml alur kerja secara manual dan mengonversinya menjadi pengodean karakter selain UTF-8, Anda harus mengedit ulang file untuk mengonversinya kembali ke UTF-8. Pastikan deklarasi XML file menentukan pengodean sebagai UTF-8, simpan file dalam format pengodean karakter UTF-8 dengan editor teks Anda, lalu undur ulang.
Skrip PowerShell berikut ini bisa digunakan di SharePoint Management Shell untuk memindai file .xoml alur kerja dalam kumpulan situs SharePoint untuk menentukan apakah mereka terpengaruh oleh perubahan ini. Output IsGoodWorkflow akan True untuk file .xoml alur kerja yang menggunakan pengodean karakter UTF-8 dan kompatibel dengan perubahan ini. Output IsGoodWorkflow akan False untuk file .xoml alur kerja yang tidak menggunakan pengodean karakter UTF-8 dan perlu diubah.
<#
.SYNOPSIS
Script to check character encoding of workflow .xoml files found in a site collection.
.DESCRIPTION
This script checks the character encoding of workflow .xoml files found in a site collection based
on the security improvement documented here: https://support.microsoft.com/topic/sharepoint-2010-workflows-might-be-blocked-by-enhanced-security-policy-kb5020238-eb91e24d-eea4-4490-a281-86503adc8b27
This could be altered to take an SPWebApplication object, iterate through all SPSite objects in the Sites SPSiteCollection,
and then iterate through all SPWeb subsites in the AllWebs SPWebCollection.
.EXAMPLE
Get-WorkflowStatusForSite -SiteCollectionUrl https://sharepoint
.EXAMPLE
Get-WorkflowStatusForSite -SiteCollectionUrl https://sharepoint -IgnoreSubSites
.INPUTS
None
.OUTPUTS
PSCustomObject with Site, Web, WorkflowFileName and IsGoodWorkflow Result
Site Web WorkflowFileName IsGoodWorkflow
---- --- ---------------- --------------
SPSite Url=http://sharepoint http://sharepoint/WorkflowTest 2010 Log Workflow.xoml True
SPSite Url=http://sharepoint http://sharepoint/WorkflowTest Another Test Log.xoml True
.NOTES
Version .1
#>
param(
[Parameter(Position=2,HelpMessage="The site collection URL to validate.")]
[string]$SiteCollectionUrl,
[Parameter(Position=3,HelpMessage="Ignore subsites below the top-level site in the site collection.")]
[switch]$IgnoreSubSites
)
function IsGoodWorkflow
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[System.Xml.XmlReader]$xmlReader
)
try {
$xDoc = [System.Xml.Linq.XDocument]::Load($xmlReader)
if ($null -ne $xDoc -and $null -ne $xDoc.Declaration -and $null -ne $xDoc.Declaration.Encoding)
{
if ($xdoc.Declaration.Encoding.ToLower() -ne "utf-8")
{
return $false
}
}
}
catch
{
return $false
}
return $true
}
function CheckWorkflowFile
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Microsoft.SharePoint.SPFile]$SPFile
)
$xmlReader = [System.Xml.XmlReader]::Create($SPFile.OpenBinaryStream())
if ($null -ne $xmlReader)
{
$isGood = $xmlReader | IsGoodWorkflow
$xmlReader.Close()
$xmlReader.Dispose()
return [PSCustomObject]@{
Site = $SPFile.Item.Web.Site
Web = $SPFile.Item.Web.Url
WorkflowFileName = $SPFile.Name
IsGoodWorkflow = $isGood
}
}
}
function CheckWorkflowsForWeb
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Microsoft.SharePoint.SPWeb]$SPWeb
)
write-host "Checking $SPweb"
$WorkflowsList = $SPWeb.Lists["Workflows"]
$results = @()
if ($WorkflowsList)
{
Write-Host "Found: " $WorkflowsList.Title
foreach ($listItem in $WorkflowsList.Items)
{
if ($listItem.File -and $listItem.File.Name.ToLower().EndsWith(".xoml"))
{
Write-Host "Found Workflow: " $listItem.File.Name
$results += (CheckWorkflowFile $listItem.File)
}
}
}
return $results
}
function CheckWorkflowsForSite
{
param
(
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
[Microsoft.SharePoint.SPSite]$SPSite,
[switch]$IgnoreSubSites
)
$results = @()
if ($IgnoreSubSites)
{
$SPWeb = $SPSite.RootWeb
$results += CheckWorkflowsForWeb $SPWeb
$SPWeb.Dispose()
}
else
{
foreach ($SPWeb in $SPSite.AllWebs)
{
$results += CheckWorkflowsForWeb $SPWeb
$SPWeb.Dispose()
}
}
return $results
}
if ([string]::IsNullOrEmpty($SiteCollectionUrl))
{
$SiteCollectionUrl = Read-Host "Please provide a site collection URL (Default: http://sharepoint)"
if ([String]::IsNullOrEmpty($SiteCollectionUrl))
{
$SiteCollectionUrl = "http://sharepoint"
}
}
$SPSite = Get-SPSite $SiteCollectionUrl -ErrorAction SilentlyContinue
if ($null -eq $SPSite)
{
Write-Host "Site collection $SiteCollectionUrl not found." -ForegroundColor Red
return;
}
$results = CheckWorkflowsForSite $SPSite
# Dispose of the Site
$SPSite.Dispose()
# Results can be exported to a CSV or manipulated
$results
Riwayat perubahan
Tabel berikut ini merangkum beberapa perubahan terpenting pada topik ini.
Tanggal |
Deskripsi |
---|---|
22 November 2022 |
Menambahkan catatan di bagian "Penyebab" dan memperbarui bagian "Solusi" dengan skrip PowerShell untuk memindai file .xoml alur kerja. |