Sintomas
Depois de instalar as seguintes atualizações de segurança de outubro para o Microsoft SharePoint Server, alguns Microsoft cenários de fluxo de trabalho do SharePoint 2010 poderão ser bloqueados. Além disso, as etiquetas de evento "6ksbk" são registadas nos registos do Sistema de Registo Unificado (ULS) do SharePoint.
Causa
Para reforçar a segurança dos fluxos de trabalho do SharePoint, o SharePoint suporta agora apenas a codificação de carateres UTF-8 para ficheiros .xoml de fluxo de trabalho.
Nota: As ferramentas de fluxo de trabalho do SharePoint, como o SharePoint Designer, Microsoft Visual Studio e Nintex, criam ficheiros .xoml de fluxo de trabalho com a codificação de carateres UTF-8 por predefinição. Os clientes não serão afetados por esta melhoria de segurança, a menos que tenham editado manualmente os ficheiros .xoml do fluxo de trabalho e os tenha convertido numa codificação de carateres diferente. Este problema está documentado neste artigo da BDC sobre a possibilidade extremamente rara de os clientes terem optado por fazê-lo.
Solução
Se editou manualmente um ficheiro .xoml de fluxo de trabalho e o converteu numa codificação de carateres diferente de UTF-8, terá de voltar a editar o ficheiro para convertê-lo novamente para UTF-8. Certifique-se de que a declaração XML do ficheiro define a codificação como UTF-8, guarde o ficheiro no formato de codificação de carateres UTF-8 com o editor de texto e, em seguida, volte a implementá-lo.
O seguinte script do PowerShell pode ser utilizado na Shell de Gestão do SharePoint para analisar os ficheiros .xoml do fluxo de trabalho numa coleção de sites do SharePoint para determinar se são afetados por esta alteração. A saída do IsGoodWorkflow será True para ficheiros .xoml de fluxo de trabalho que utilizam a codificação de carateres UTF-8 e são compatíveis com esta alteração. A saída do IsGoodWorkflow será False para ficheiros .xoml de fluxo de trabalho que não estão a utilizar a codificação de carateres UTF-8 e que têm de ser modificados.
<#
.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
Histórico de alterações
A tabela seguinte resume algumas das alterações mais importantes a este tópico.
Data |
Descrição |
---|---|
22 de novembro de 2022 |
Adicionou uma nota na secção "Causa" e atualizou a secção "Solução" com um script do PowerShell para analisar os ficheiros .xoml do fluxo de trabalho. |