Introduction
La plupart des clients SharePoint Online gèrent l’expérience d’ouverture du fichier à l’aide du modèle strict. Par conséquent, tous les fichiers qui peuvent potentiellement causer des dommages (par exemple, un fichier html avec script incorporé) ne sont pas exécutés dans le navigateur, mais téléchargés ou montrés en tant que contenu brut (aperçu html dans l’expérience utilisateur moderne). Si votre client est configuré à l’aide du modèle permissif, l’expérience ouverture de fichier va exécuter le fichier, par exemple un fichier html dans une bibliothèque de documents sera exécutée et la page est affichée dans le navigateur. Dans le modèle strict ce fichier serait téléchargé.
Le paramètre par défaut est aujourd'hui strict et vous ne pouvez pas changer votre client au modèle permissif. Pour les clients qui sont passés au modèle permissif dans le passé, cela va changer : le modèle client permissif sera déconseillé d’ici fin 2018, à ce stade tous les clients seront convertis au modèle strict.
Important
Le 31 décembre 2018, tous les clients qui utilisent encore le modèle permissif seront convertis au modèle strict!
Mon client sera-t-il affecté ?
L’approche recommandée pour vérifier cela consiste à consulter le paramètre PermissiveBrowserFileHandlingOverride à l’aide dePowerShell Office 365 pour SharePoint Online:
Connect-SPOService -url https://contoso-admin.sharepoint.com
$tenant = get-spotenant
$tenant.PermissiveBrowserFileHandlingOverride
Si cela engendre faux, votre client n’est pas concerné, si ce champ est défini sur vrai, vous devez préparer le changement à venir.
Comment puis-je préparer la modification de permissif à strict ?

Étape 1 : Évaluer l’impact
Comprendre quels fichiers sont concernés est une première étape et vous pouvez le faire via le scanner de fichier permissif. Voir Scanner permissif SharePoint pour en savoir plus sur le scanner et comment l’utiliser. Dans la configuration par défaut, cet scanner effectue une recherche pour les fichiers html/html, mais en utilisant les options de ligne de commande, vous pouvez demander au scanner de rechercher des types de fichiers supplémentaires.
Le résultat du scanner est un fichier CSV répertoriant tous les fichiers concernés (html/htm + autres types de fichiers éventuels), y compris les informations sur les fichiers html/htm (numéro de liens et les scripts qui sont utilisés, dernière modification donnée, nombre de vues).
Étape 2 : Analyser les résultats d’analyse
Une fois que vous avez la liste des fichiers concernés, vous devez évaluer lesquels parmi ces fichiers et sites hébergeant ces fichiers sont toujours pertinents. Le fichier et/ou site peut être périmé, et donc la correction de ces fichiers/sites peut éventuellement être ignorée. Pour vous aider à comprendre les besoin d’entreprise, le rapport contient les administrateurs de collections de site et les propriétaires de site, visant à vous fournir les informations nécessaires pour les contacter.
Étape 3 : Corriger les fichiers
Si les fichiers sont toujours importants et que vous voulez continuer à pouvoir exécuter les fichiers une fois que le client a été déplacé vers le paramètre strict, vous devrez solutionner les fichiers comme expliqué dans les chapitres suivants.
Processus de correction pour les fichiers html/htm
La raison principale qui a poussé les clients à conserver le mode permissif est qu’ils pouvaient utiliser des fichiers html depuis une bibliothèque de documents. Comme mentionné auparavant, une fois le changement au modèle strict effectué, ces fichiers seront simplement téléchargés et ne s’ouvriront plus automatiquement. Pour ces fichiers html/html la correction est simple : si un utilisateur/application avec autorisations de propriétaire de site ou d’administrateur de collection de sites renomme les fichiers html/htm en fichiers ASPX, ces fichiers s’ouvrent à nouveau. SharePoint PnP PowerShell ci-dessous explique comment effectuer cette opération. Partez du principe que vous avez un fichier html avec l’url suivante : 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
Notes
PnP PowerShell est une solution open source pour laquelle un support est assuré par la communauté active. Il n’existe pas de contrat SLA Microsoft pour le support technique relatif à cet outil open source.
Plus tard dans cet article, un script s’affichera, qui peut effectuer une complète «résolution» d’une collection de sites entière.
Qui peut renommer des fichiers ?
Cette opération doit être effectuée par les utilisateurs ayant l’autorisation AddAndCustomizePages (ACP), qui est accordée par défaut aux administrateurs de collections de site ou propriétaires de site. Si le changement de nom est effectué par un utilisateur disposant du niveau d’autorisation Modifier (c’est le cas des membres du site), le changement est effectué, mais le fichier .aspx qui en résulte n’est pas marqué pour l’exécution et en tant que tel sera téléchargé et pas exécuté.
Lorsque vous voulez effectuer un changement de nom en bloc vous utiliserez probablement un principe de l’application au lieu d’un compte d’utilisateur et il en va alors de même : le principe de l’application a besoin de l’autorisation ACP (par exemple, niveau d’autorisation contrôle total) afin d’effectuer cette tâche.
Qu’en est-il des liens incorporés à d’autres fichiers html/htm ?
Mes fichiers html/htm sont liés à d’autres fichiers html/htm dans le même dossier ou dans un sous-dossier…ces liens s’arrêteront-ils si les fichiers sont renommés en aspx ? Si le renommage sous-jacent est effectué à l’aide de l’appel de l’API MoveTo, la plupart des liens relatifs à l’intérieur du fichier html sont automatiquement résolus pour être des liens vers des fichiers aspx…essentiellement en renommant une structure de fichiers html/htm imbriqués qui se lient les uns aux autres en renommant uniquement les fichiers réels, tous les liens à l’intérieur des documents seront gérés par le renommage.
Notes
Le changement de nom automatique ne fonctionnera pas lorsque le document HTML contient des liens pointant vers des fichiers d’une autre collection de sites ou lorsque les liens sont générés dynamiquement à l’aide de JavaScript. Dans ce cas, des actions manuelles sont nécessaires pour corriger les liens.
Qu’en est-il des fichiers html/html référencés dans un composant WebPart Éditeur de contenu ?
Un modèle courant lorsque vous travaillez avec le composant WebPart Éditeur de contenu est de faire référence à un fichier html/htm. Lorsque le fichier html/htm référencé est renommé dans un fichier .aspx, SharePoint va automatiquement mettre à jour la référence dans le composant WebPart Éditeur de contenu ; cela signifie que, à compter de ce moment, le composant WebPart Éditeur de contenu va charger le fichier .aspx au lieu du fichier html/htm. Par conséquent, les fichiers utilisés par le composant WebPart Éditeur de contenu peuvent être renommés avec tous les autres fichiers html/htm.
Qu’en est-il des sites qui ont activé la fonctionnalité « noscript » ?
Tous les sites « modernes » (site d’équipe, site de communication) ont la fonctionnalité « noscript » activée par défaut. Le résultat est que personne n’aura l’autorisation AddAndCustomizePages (ACP). donc personne ne pourra effectuer un changement de nom réussi de html/htm à aspx. En règle générale, les fichiers html/htm existent dans des sites d’équipe classique (migrés) donc ce problème ne se présente pas. Dans le cas où vous travaillez dans un site « noscript », vous devez désactiver la fonctionnalité « noscript », effectuer le changement de nom, puis activer à nouveau « noscript ». Les fichiers html/htm peuvent ensuite être exécutés à nouveau, mais notez que chaque modification sur ces fichiers les marquera comme non exécutables à nouveau. La désactivation de « noscript » et la mise à jour du fichier gérera le problème de nouveau.
Dans l’expérience de bibliothèque de document moderne, le fichier aspx semble ne pas s’ouvrir initialement ?
L’expérience de bibliothèque de documents modernes « part du principe» qu’il s’agit d’un certain type de fichier lorsque le fichier a été ajouté et lors de l’accès le fichier pour la première fois vous verrez que les fichiers aspx sont ouverts de la mauvaise manière. Une deuxième tentative permettra toutefois au fichier de s’exécuter. Pour éviter ce problème, il est recommandé d’extraire par programme chaque fichier renommé une seule fois, ce qui donne à SharePoint la possibilité de configurer correctement le type de fichier. SharePoint PnP PowerShell ci-dessous explique comment effectuer cette opération :
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
Notes
Cette étape «télécharger» est incluse dans le script qui peut effectuer une complète «résolution» d’une collection de sites entière.
Corriger les autres types de fichiers
Les fichiers HTML/htm sont la raison principale qui pousse les clients à utiliser le mode permissif mais qu’en est-il des autres types de fichier ? Pour les formats de fichiers les plus courants, SharePoint Online propose une fonctionnalité d’aperçu, comme expliqué dans ce blog. SharePoint Online peut afficher un aperçu des formats suivants :
Documents
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
Images
ai, arw, bmp, cr2, eps, erf, gif, ico, icon, jpeg, jpg, mrw, nef, orf, pict, png, psd, tif, tiff
Vidéo
3gp, m4v, mov, mp4, wmv
3D
3mf, fbx, obj, ply, stl
Médical
dcm, dcm30, dic, dicm, dicom
Texte et 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
Exemple de script qui peut solutionner une collection de sites entière
Ce script peut être utilisé comme base de départ pour une correction étendue à une collection de sites. Le script effectue les opérations suivantes :
- Installer PowerShell PnP si pas encore installé
- Utiliser la recherche pour trouver tous les fichiers html/htm dans la collection de sites
- Renommer ces fichiers en .aspx
- Télécharger le fichier renommé pour le faire fonctionner dès le premier accès dans l’interface utilisateur de bibliothèque de documents modernes
# 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://docs.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
L’exemple de sortie du script réussi se présente comme suit :
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