Freigeben über


Einführung

Die meisten der SharePoint Online Mandanten öffnen Dateien über das strenge -Modell. Deshalb werden alle Dateien, die potenziell (z. B. eine HTML-Datei mit eingebettetem Skript) Schaden anrichten können, nicht im Browser ausgeführt, sondern heruntergeladen oder als unformatierter Inhalt (HTML-Vorschau in der modernen Benutzeroberfläche) angezeigt. Wenn Ihr Mandant mit dem uneingeschränkten -Modell konfiguriert ist, wird die Datei durch das Öffnen ausgeführt, eine HTML-datei in einer Dokumentbibliothek wird beispielsweise nicht ausgeführt und die Seite wird im Browser angezeigt. bei der strengen Handhabung würde diese Datei heruntergeladen.

Aktuell lautet die Standardeinstellung streng und Sie können Ihren Mandanten nicht zum uneingeschränkten Modell ändern. Für Mandanten, die in der Vergangenheit zum uneingeschränkten Modell gewechselt sind ändern sich Folgendes: das für den Mandanten uneingeschränkte Modell wird Ende 2018 eingestellt, zu diesem Zeitpunkt werden alle Mandanten in streng geändert.

Wichtig

Am 31. Dezember 2018 werden alle Mandanten, die immer noch das uneingeschränkte-Modell zum strengen -Modell geändert!

Ist mein Mandant betroffen?

Der empfohlene Ansatz zur Überprüfung der PermissiveBrowserFileHandlingOverride-Einstellung mit der Office 365-PowerShell für SharePoint Online lautet wie folgt:

Connect-SPOService -url https://contoso-admin.sharepoint.com
$tenant = get-spotenant
$tenant.PermissiveBrowserFileHandlingOverride

Wenn das zu False führt, sind Ihre Mandanten nicht betroffen, wenn es zu True führt, müssen Sie sich auf die bevorstehende Einstellung vorbereiten.

Wie kann ich mich auf die Änderung von uneingeschränkt in streng vorbereiten?

Veranschaulicht die Änderung zwischen dem unzulässigen zum strengen Modell

Schritt 1: Bewerten Sie die Auswirkung

Der erste Schritt besteht darin, nachzuvollziehen, welche Dateien betroffen sind, verwenden Sie dazu den uneingeschränkten Dateiscanner. Weitere Informationen zum Scanner und seiner Verwendung finden Sie unter Uneingeschränkter SharePoint-Scanner In der Standardkonfiguration sucht dieser Scanner nach HTML/HTML-Dateien, durch Verwenden der Befehlszeilenoptionen können Sie den Scanner anfordern, um nach weiteren Dateitypen zu suchen.

Das Ergebnis des Scans ist eine CSV-Dateiauflistung aller betroffenen Dateien (HTML/HTM + optional andere Dateitypen), einschließlich der Informationen zu den HTML-/HTM-Dateien (Anzahl der Links und Skripts, die verwendet werden, Daten der letzten Änderung, Anzahl der Aufrufe).

Schritt 2: Analysieren der Scan-Ergebnisse

Nachdem Sie die Liste der betroffenen Dateien haben, müssen Sie die feststellen, welche dieser Dateien und Websites, auf denen sich diese Dateien befinden, weiterhin relevant für das Unternehmen sind. Die Datei und/oder Website sind/ist möglicherweise veraltet und falls das der Fall ist, kann eine Korrektur dieser Dateien/Websites möglicherweise übersprungen werden. Um Ihnen dabei zu helfen, die Relevanz für Ihr Unternehmen nachvollziehen zu können, enthält der Bericht die Websitesammlungsadministratoren und Websitebesitzer, die Ihnen die erforderlichen Informationen bereitstellen, um Kontakt mit ihnen aufnehmen zu können.

Schritt 3: Korrigieren der Dateien

Wenn die Dateien weiterhin wichtig sind, und Sie weiterhin in der Lage möchten, die Dateien auszuführen, nachdem der Mandant die Einstellung zu streng geändert hat, müssen Sie die Dateien wie in den nächsten Kapiteln beschrieben korrigieren.

Korrekturprozess für HTML-/HTM-Dateien

Der wichtigste Grund für Kunden, beim uneingeschränkten Modus zu bleiben, besteht darin, dass sie in der Lage sein möchten, HTML-Dateien aus einer Dokumentbibliothek zu verwenden. Wie bereits erwähnt, nachdem die Änderung in streng vorgenommen wurde, werden diese Dateien einfach heruntergeladen und nicht mehr automatisch geöffnet. Für diese HTML-/HTM-Dateien ist die Korrektur einfach: wenn ein Benutzer/eine App mit Adminstratorberechtigungen als Websitebesitzer- oder für die Websitesammlung die HTML-/HTM-Dateien in ASPX-Dateien umbenennt, öffnen sich diese Dateien erneut. Unter SharePoint PnP-PowerShell wird veranschaulicht, wie dazu vorgegangen werden muss. Angenommen, Sie haben eine HTML-Datei mit folgenden URL: https://contoso.sharepoint.com/sites/permissive/html/newfile.html.

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/permissive -Verbose
Rename-PnPFile -ServerRelativeUrl /sites/permissive/html/newfile.html -TargetFileName newfile.aspx -OverwriteIfAlreadyExists

Hinweis

PnP PowerShell ist eine Open Source-Lösung mit aktiver Community, die Support dafür bietet. Es gibt keine SLA für den Support des Open-Source-Tools durch Microsoft.

Später in diesem Artikel wird ein Skript veranschaulicht, durch das eine vollständige Korrektur einer kompletten Websitesammlung vorgenommen werden kann.

Wer kann diese Umbenennung durchführen?

Das Umbenennen muss von Benutzern durchgeführt werden, die über die AddAndCustomizePages-Berechtigung (ACP) verfügen, die standardmäßig Websitesammlungsadministratoren und Websitebesitzern gewährt wird. Wenn das Umbenennen von einem Benutzer mit der Berechtigungsstufe Bearbeiten (also Websitemitglieder) erfolgt, erfolgt die Umbenennung, die daraus resultierende ASPX-Datei wird jedoch nicht für die Ausführung gekennzeichnet und wird stattdessen heruntergeladen.

Wenn Sie die Umbenennung zusammen vornehmen möchten, verwenden Sie stattdessen einen App-Prinzipal eines Benutzerkontos und dafür gilt das Gleiche: der App-Prinzipal benötigt die ACP-Berechtigung (z. B. die Berechtigungsstufe Kontrolle), damit dies funktioniert.

Mein HTML/HTM-Dateienlink zu anderen HTML-/HTM-Dateien in demselben Ordner oder in einem Unterordner…gehen diese Links kaputt, wenn die Dateien in ASPX umbenannt werden? Wenn die zugrunde liegende Umbenennung mithilfe des MoveTo API-Aufrufs erfolgt, werden die meisten relativen Links innerhalb der HTML-Datei automatisch in Links zu ASPX-Dateien korrigiert... im Grunde genommen kann das Umbenennen einer Struktur verschachtelter HTML-/HTM-Dateien, die untereinander verknüpft sind, nur durch das Umbenennen der tatsächlichen Dateien erfolgen, alle Links in den Dokumenten werden von der Umbenennung behandelt.

Hinweis

Die automatische Umbenennung funktioniert nicht, wenn das HTML-Dokument Links zu Dateien enthält, die sich auf Dateien in einer anderen Websitesammlung beziehen oder die Links dynamisch mit JavaScript generiert werden. In diesen Fällen sind manuelle Aktionen erforderlich, um die Links zu korrigieren.

Wie sieht es mit HTML-/HTM-Dateien aus, auf die in einem Inhaltseditor-Webpart verwiesen wird?

Ein häufiges Muster bei der Arbeit mit dem Inhaltseditor-Webpart verweist auf edine HTML-/HTM-Datei. Wenn die referenzierte HTML-/HTM-Datei in eine ASPX-Datei umbenannt wird, aktualisiert SharePoint automatisch den Verweis im Inhaltseditor-Webpart, wodurch statt der HTML-/HTM-Datei die ASPX-Datei geladen wird. Daher können Dateien, die vom Inhaltseditor-Webpart verwendet werden, zusammen mit allen anderen HTML-/HTM-Dateien umbenannt werden.

Wie sieht es mit Websites mit aktivierter „noscript“-Funktion aus?

Bei allen „modernen“ Websites (moderne Teamwebsite, Kommunikationswebsite) ist die Funktion „noscript“ standardmäßig aktiviert. Dadurch verfügt niemand über die AddAndCustomizePages-Berechtigung (ACP), sodass kein Benutzer eine erfolgreiche Umbenennung der Dateien von HTML/HTM in ASPX vornehmen kann. In der Regel befinden sich die HTML-/HTM-Dateien in auf (migrierten) klassischen Teamwebsites, deshalb gibt es dieses Problem da nicht. Wenn Sie auf einer „noscript“-Website arbeiten, müssen Sie zunächst die „noscript“-Funktion deaktivieren, die Umbenennung vornehmen und die Funktion „noscript“ wieder aktivieren. Dadurch können die HTML-/HTM-Dasteien wieder ausgeführt werden, durch jede Änderung an diesen Dateien werden sie jedoch wieder als nicht ausführbar gekennzeichnet. Das erfolgt durch erneutes Deaktivieren der Funktion noscript“ und Aktualisieren der Datei.

Auf der modernen Oberfläche für Dokumentbibliotheken lässt sich die ASPX-Datei zunächst nicht öffnen?

Die moderne Dokumentbibliothek-Oberfläche setzt einen bestimmten Dateityp voraus, wenn die Datei hinzugefügt wird und dann zum ersten Mal der Zugriff darauf erfolgt, werden Sie feststellen, dass die ASPX-Dateien falsch geöffnet werden. Beim zweiter Versuch wird die Datei jedoch ausgeführt. Um dieses Problem zu vermeiden, wird empfohlen, die umbenannte Datei ein Mal programmgesteuert abzurufen, wodurch SharePoint die Möglichkeit erhält, den Dateityp korrekt festzulegen. Unter SharePoint PnP-PowerShell wird veranschaulicht, wie dazu vorgegangen werden muss.

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/permissive -Verbose
Get-PnPFile -Url /sites/permissive/html/newfile.aspx -Path c:\temp -Filename newfile.aspx -AsFile

Hinweis

Dieser „Download“-Schritt ist in dem Skript enthalten, der die vollständige „Korrektur“ einer kompletten Websitesammlung vornehmen kann.

Korrektur anderer Dateitypen

HTML/HTM-Dateien sind der Hauptgrund für Kunden, den uneingeschränkten Modus zu verwenden, wie verhält es sich jedoch bei anderen Dateitypen? Für die gängigsten Dateiformate bietet SharePoint Online eine Vorschaufunktion, wie in diesem Blog erläutert. SharePoint Online kann folgende Formate in der Vorschau anzeigen:

Dokumente

csv, doc, docm, docx, dotx, eml, msg, odp, ods, odt, pdf, pot, potm, potx, pps, ppsx, ppt, pptm, pptx, rtf, vsd, vsdx, xls, xlsb, xlsm, xlsx

Bilder

ai, arw, bmp, cr2, eps, erf, gif, ico, icon, jpeg, jpg, mrw, nef, orf, pict, png, psd, tif, tiff

Video

3gp, m4v, mov, mp4, wmv

3D

3mf, fbx, obj, ply, stl

Medizinisch

dcm, dcm30, dic, dicm, dicom

Text und Code

abap, ada, adp, ahk, as, as3, asc, ascx, asm, asp, awk, bash, bash_login, bash_logout, bash_profile, bashrc, bat, bib, bsh, build, builder, c, c++, capfile, cc, cfc, cfm, cfml, cl, clj, cls, cmake, cmd, coffee, cpp, cpt, cpy, cs, cshtml, cson, csproj, css, ctp, cxx, d, ddl, di, dif, diff, disco, dml, dtd, dtml, el, emakefile, erb, erl, f, f90, f95, fs, fsi, fsscript, fsx, gemfile, gemspec, gitconfig, go, groovy, gvy, h, h++, haml, handlebars, hbs, hcp, hh, hpp, hrl, hs, htc, hxx, idl, iim, inc, inf, ini, inl, ipp, irbrc, jade, jav, java, js, jsp, jsx, l, less, lhs, lisp, log, lst, ltx, lua, m, make, markdn, markdown, md, mdown, mkdn, ml, mli, mll, mly, mm, mud, nfo, opml, osascript, out, p, pas, patch, php, php2, php3, php4, php5, phtml, pl, plist, pm, pod, pp, profile, properties, ps1, pt, py, pyw, r, rake, rb, rbx, rc, re, readme, reg, rest, resw, resx, rhtml, rjs, rprofile, rpy, rss, rst, rxml, s, sass, scala, scm, sconscript, sconstruct, script, scss, sgml, sh, shtml, sml, sql, sty, tcl, tex, text, textile, tld, tli, tmpl, tpl, txt, vb, vi, vim, wsdl, xhtml, xml, xoml, xsd, xsl, xslt, yaml, yaws, yml, zip, zsh

Beispielskript, das eine vollständige Websitesammlung korrigieren kann

Dieses Skript kann als erste Grundlage für die Korrektur eine Websitesammlung dienen. Das Skript geht folgendermaßen vor:

  • Es installiert PnP-PowerShell, sofern es noch nicht installiert ist
  • Verwenden Sie die Suchfunktion, um alle HTML-/HTM-Dateien in der Websitesammlung zu finden
  • Benennen Sie diese Dateien in ASPX um
  • Laden Sie die umbenannte Datei herunter, um die Interaktion beim ersten Zugriff auf die moderne Dokumentbibliothek-Oberfläche zu aktivieren
# This script does rename .htm and .html files to .aspx files. Doing so enables these files to be "executed" in SharePoint Online 
# which has it's file handling configured to be strict. See https://learn.microsoft.com/sharepoint/dev/solution-guidance/security-permissivesetting 
# for more details

function PermissiveRemediateASiteCollection
{
    param([string] $siteCollectionUrl, [string] $winCredentialsManagerLabel)
    
    $siteCollectionUrl = $siteCollectionUrl.TrimEnd("/");

    # Gets or Sets the tenant admin credentials.
    $credentials = $null

    if(![String]::IsNullOrEmpty($winCredentialsManagerLabel) -and (Get-PnPStoredCredential -Name $winCredentialsManagerLabel) -ne $null)
    {
        $credentials = $winCredentialsManagerLabel
    }
    else
    {
        # Prompts for credentials, if not found in the Windows Credential Manager.
        $email = Read-Host -Prompt "Please enter admin email"
        $pass = Read-host -AsSecureString "Please enter admin password"
        $credentials = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $email, $pass
    }

    if($credentials -eq $null) 
    {
        Write-Host "Error: No credentials supplied." -ForegroundColor Red
        exit 1
    }

    Connect-PnPOnline -Url $siteCollectionUrl -Credentials $credentials -Verbose

    Write-Host "Using search to obtain a list of files to remediate..."
    Try
    {
        $searchQuery = "((fileextension=htm OR fileextension=html) AND contentclass=STS_ListItem_DocumentLibrary AND Path:$siteCollectionUrl/*)"
        $htmlFiles = Submit-PnPSearchQuery -Query $searchQuery -TrimDuplicates:$false -All
    }
    Catch [Exception]
    {
       $ErrorMessage = $_.Exception.Message
       Write-Host "Error: Search query to find the files to remediate failed...exiting the script" -ForegroundColor Red 
       Write-Host "Error: $ErrorMessage" -ForegroundColor Red 
       exit 1
    }

    # if no files were found then bail out
    if ($htmlFiles.RowCount -eq 0)
    {
        Write-Host "No files found to remediate...exiting the script" -ForegroundColor Green
        exit 0
    }
    else
    {
        Write-Host "Found" $htmlFiles.RowCount "files to remediate" -ForegroundColor Green
    }

    # Create temp folder if not yet existing
    $path = "$env:TEMP\permissivefix"
    If(!(test-path $path))
    {
          New-Item -ItemType Directory -Force -Path $path
    }

    # iterate over the found files and rename them
    foreach($htmlFile in $htmlFiles.ResultRows)
    {
        Try
        {
            $web = $htmlFile.SPWebUrl
            Write-Host "Connected to $web..."
            Connect-PnPOnline -Url $web -Credentials $credentials

            $fileToRename = $htmlFile.OriginalPath
            Write-Host "Renaming $fileToRename..."

            # Get the server relative path
            $serverRelativePath = $fileToRename.Replace("https://", "")
            $serverRelativePath = $serverRelativePath.Substring($serverRelativePath.IndexOf("/"))
            #Write-Host $serverRelativePath

            # Get new file name and server relative path
            $newFileName = $serverRelativePath.Substring($serverRelativePath.LastIndexOf("/") + 1).ToLower()
            $serverRelativePathNew = $serverRelativePath
            if ($newFileName.EndsWith(".html"))
            {
                $newFileName = $newFileName.Replace(".html", ".aspx")
                $serverRelativePathNew = $serverRelativePathNew.Replace(".html", ".aspx")
            } 
            elseif($newFileName.EndsWith(".htm"))
            {
                $newFileName = $newFileName.Replace(".htm", ".aspx")
                $serverRelativePathNew = $serverRelativePathNew.Replace(".html", ".aspx")
            }
        
            # Perform the file rename
            Rename-PnPFile -ServerRelativeUrl $serverRelativePath -TargetFileName $newFileName -OverwriteIfAlreadyExists -Force
        
            # Download the file once to ensure it works correctly in modern UI
            Get-PnPFile -Url $serverRelativePathNew -Path $path -Filename $newFileName -AsFile -Force
        }
        Catch [Exception]
        {
           $ErrorMessage = $_.Exception.Message
           Write-Host "Error: Rename of file $serverRelativePath failed" -ForegroundColor Red 
           Write-Host "Error: $ErrorMessage" -ForegroundColor Red 
        }
    }

    # Cleanup the temp folder
    Write-Host "Cleaning up the temp folder $path"
    Remove-Item $path -Recurse -ErrorAction Ignore

    Write-Host "Remediation done for site collection $siteCollectionUrl" -BackgroundColor DarkGreen -ForegroundColor White
}

#######################################################
# MAIN section                                        #
#######################################################

# Url of the site collection to remediate
$siteCollectionUrlToRemediate = "https://contoso.sharepoint.com/sites/testsite"
# If you use credential manager then specify the used credential manager entry, if left blank you'll be asked for a user/pwd
$credentialManagerCredentialToUse = "credmandreference"

# Ensure PnP PowerShell is loaded
if (-not (Get-Module -ListAvailable -Name SharePointPnPPowerShellOnline)) 
{
    Install-Module SharePointPnPPowerShellOnline
}

Import-Module SharePointPnPPowerShellOnline

# Remediate the given site collection
PermissiveRemediateASiteCollection $siteCollectionUrlToRemediate $credentialManagerCredentialToUse

Die Beispielausgabe einer erfolgreichen Skriptausführung sieht wie folgt aus:

WARNING: The names of some imported commands from the module 'SharePointPnPPowerShellOnline' include unapproved verbs that might make them less discoverable. To find the commands with unapproved ver
bs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.
VERBOSE: PnP PowerShell Cmdlets (2.22.1801.0): Connected to https://contoso.sharepoint.com/sites/testsite
Using search to obtain a list of files to remediate...
Found 15 files to remediate


    Directory: C:\Users\demouser\AppData\Local\Temp


Mode                LastWriteTime         Length Name                                                                                                                                                
----                -------------         ------ ----                                                                                                                                                
d-----        7/02/2018     19:48                permissivefix                                                                                                                                       
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/About.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/brol.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/imagetarget.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/sample_html_afternoscript9.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/bla.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/sample_html.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/home2.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/howtouse.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/home.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/team_home.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/imagesource.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/bla2.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/wikipage.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/newfile_html.html...
Connected to https://contoso.sharepoint.com/sites/testsite...
Renaming https://contoso.sharepoint.com/sites/testsite/Shared Documents/Home3.html...
Cleaning up the temp folder C:\Users\demouser\AppData\Local\Temp\permissivefix
Remediation done for site collection https://contoso.sharepoint.com/sites/testsite