תסמינים
לאחר התקנת עדכוני האבטחה הבאים לאוקטובר עבור Microsoft SharePoint Server, ייתכן שתרחישים מסוימים של זרימת Microsoft SharePoint 2010 ייחסמו. בנוסף, תגיות אירוע "6ksbk" נרשמות ביומני מערכת הרישום המאוחדת (ULS) של SharePoint.
-
תיאור של עדכון האבטחה עבור SharePoint Foundation 2013: 11 באוקטובר 2022 (KB5002284)
-
תיאור של עדכון האבטחה עבור SharePoint Enterprise Server 2016: 11 באוקטובר 2022 (KB5002287)
-
תיאור של עדכון האבטחה עבור SharePoint Server 2019: 11 באוקטובר 2022 (KB5002278)
-
תיאור של עדכון האבטחה עבור המהדורת מנוי של SharePoint Server: 11 באוקטובר 2022 (KB5002290)
סיבה
כדי לחזק את האבטחה של זרימות עבודה של SharePoint, SharePoint תומך כעת בקידוד תווים של UTF-8 בלבד עבור קבצי .xoml של זרימת עבודה.
הערה: כלי זרימת עבודה של SharePoint כגון SharePoint Designer, Microsoft Visual Studio ו- Nintex יוצרים קבצי .xoml של זרימת עבודה באמצעות קידוד תווים של UTF-8 כברירת מחדל. הלקוחות לא יושפעו משיפורים באבטחה אלה, אלא אם הם ערכו באופן ידני את קבצי .xoml של זרימת העבודה שלהם והמירו אותם לקידוד תווים אחר. בעיה זו מופיעה במאמר KB זה על האפשרות הנו נדירה במיוחד שלקוחות בחרו לעשות זאת.
פתרון עוקף
אם ערכת באופן ידני קובץ .xoml של זרימת עבודה והמרת אותו לקידוד תווים שאינו UTF-8, יהיה עליך לערוך מחדש את הקובץ כדי להמיר אותו בחזרה ל- UTF-8. ודא שהצהרת ה- XML של הקובץ מגדירה את הקידוד כ- UTF-8, שמור את הקובץ בתבנית קידוד תווים של UTF-8 באמצעות עורך הטקסט ולאחר מכן מקם אותו מחדש.
ניתן להשתמש בקובץ ה- Script הבא של PowerShell במעטפת ניהול SharePoint כדי לסרוק את קבצי .xoml של זרימת העבודה באוסף אתרים של SharePoint כדי לקבוע אם הם מושפעים משינוי זה. הפלט IsGoodWorkflow יהיה זמין True .xoml של זרימת עבודה המשתמשים בקידוד תווים של UTF-8 ומתאימים לשינוי זה. הפלט IsGoodWorkflow יהיה זמין False קבצי .xoml של זרימת עבודה שאינם משתמשים בקידוד תווים של UTF-8 ויש לשנותם.
<#
.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
שינוי ההיסטוריה
הטבלה הבאה מסכמת כמה מהשינויים החשובים ביותר בנושא זה.
תאריך |
תיאור |
---|---|
ה-22 בנובמבר 2022 |
הוספת הערה במקטע 'סיבה' ועודכנה את המקטע 'פתרון עוקף' באמצעות קובץ Script של PowerShell לסריקה של קבצי .xoml של זרימת העבודה. |