Sintomas
Depois de instalar as seguintes atualizações de segurança de outubro para o Microsoft SharePoint Server, alguns cenários de fluxo de trabalho do Microsoft SharePoint 2010 podem ser bloqueados. Além disso, as marcas de evento "6ksbk" são registradas nos logs do ULS (Sistema de Registro Unificado) do SharePoint.
Causa
Para fortalecer a segurança dos fluxos de trabalho do SharePoint, o SharePoint agora suporta apenas à codificação de caracteres UTF-8 para arquivos .xoml do fluxo de trabalho.
Observação: Ferramentas de fluxo de trabalho do SharePoint, como SharePoint Designer, Microsoft Visual Studio e Nintex, criam arquivos .xoml de fluxo de trabalho usando a codificação de caracteres UTF-8 por padrão. Os clientes não serão afetados por essa melhoria de segurança, a menos que tenham editado manualmente seus arquivos .xoml do fluxo de trabalho e os convertido em uma codificação de caracteres diferente. Este problema está documentado neste artigo da KB sobre a possibilidade extremamente rara de que os clientes tenham optado por fazer isso.
Solução alternativa
Se você editou manualmente um arquivo .xoml de fluxo de trabalho e o converteu em uma codificação de caracteres diferente de UTF-8, você precisará reeditar o arquivo para convertê-lo novamente em UTF-8. Verifique se a declaração XML do arquivo define a codificação como UTF-8, salve o arquivo no formato de codificação de caracteres UTF-8 com seu editor de texto e reimplante-o.
O seguinte script do PowerShell pode ser usado no Shell de Gerenciamento do SharePoint para verificar os arquivos .xoml de fluxo de trabalho em um conjunto de sites do SharePoint para determinar se eles são afetados por essa alteração. A saída IsGoodWorkflow será True para arquivos .xoml de fluxo de trabalho que utilizam a codificação de caracteres UTF-8 e são compatíveis com essa alteração. A saída IsGoodWorkflow será False para arquivos .xoml de fluxo de trabalho que não estão usando a codificação de caracteres UTF-8 e precisam 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 a seguir resume algumas das alterações mais importantes neste tópico.
Data |
Descrição |
---|---|
22 de novembro de 2022 |
Foi adicionada uma nota na seção "Causa" e atualizada a seção "Solução alternativa" com um script do PowerShell para digitalizar os arquivos .xoml do fluxo de trabalho. |