Simptomi
Nakon instalacije sljedećih sigurnosnih ažuriranja za Microsoft sustava SharePoint Server, možda će Microsoft scenariji tijeka rada sustava SharePoint 2010. Uz to, oznake događaja "6ksbk" zabilježene su u zapisnicima sustava SharePoint Unified Logging System (ULS).
Uzrok
Da bi se poboljšala sigurnost tijekova rada sustava SharePoint, SharePoint sada podržava samo šifriranje znakova UTF-8 za .xoml datoteke tijeka rada.
Napomena: Alati tijeka rada sustava SharePoint kao što su SharePoint Designer, Microsoft Visual Studio i Nintex stvaraju .xoml datoteke tijeka rada pomoću šifriranja znakova UTF-8 po zadanom. Ovo sigurnosno poboljšanje neće utjecati na korisnike ako ručno ne uredi .xoml datoteke tijeka rada i pretvori ih u drugo kodiranje znakova. Taj je problem dokumentiran u ovom članku iz baze znanja o iznimno rijetkoj mogućnosti da su korisnici odabrali to učiniti.
Zaobilazno rješenje
Ako ste ručno uredili .xoml datoteku tijeka rada i pretvorili je u kodiranje znakova koje nije UTF-8, morat ćete ponovno urediti datoteku da biste je pretvorili u UTF-8. Provjerite definira li XML deklaracija datoteke šifriranje kao UTF-8, spremite datoteku u obliku kodiranja znakova UTF-8 pomoću uređivača teksta, a zatim je ponovno postavite.
Sljedeća skripta komponente PowerShell može se koristiti u ljuski za upravljanje sustavom SharePoint za pregled .xoml datoteka tijeka rada u zbirci web-mjesta sustava SharePoint da bi se utvrdilo utječe li ta promjena na njih. Izlazni IsGoodWorkflow bit će True za .xoml datoteke tijeka rada koje koriste šifriranje znakova UTF-8 i kompatibilne su s tom promjenom. Izlazni IsGoodWorkflow bit će False za .xoml datoteke tijeka rada koje ne koriste šifriranje znakova UTF-8 i potrebno ih je izmijeniti.
<#
.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
Povijest promjena
U sljedećoj su tablici navedene neke od najvažnijih promjena ove teme.
Datum |
Opis |
---|---|
22. studenog 2022. |
Dodali smo bilješku u odjeljak "Uzrok" i ažurirali odjeljak "Zaobilazno rješenje" skriptom ljuske PowerShell da biste pregledali .xoml datoteke tijeka rada. |