現象
次のいずれかの更新プログラムをインストールした後、Microsoft SharePoint の一部の非実体化ページがレンダリングされなくなります。
-
SharePoint Server 2019 のセキュリティ更新プログラムについて: 2020 年 9 月 8 日 (KB 4484505)
-
SharePoint Enterprise Server 2016 のセキュリティ更新プログラムについて: 2020 年 9 月 8 日 (KB 4484506)
-
SharePoint Foundation 2013 のセキュリティ更新プログラムについて: 2020 年 9 月 8 日 (KB 4484525)
-
SharePoint Foundation 2010 のセキュリティ更新プログラムについて: 2020 年 9 月 8 日 (KB 4486667)
たとえば、Microsoft Identity Manager (MIM) ポータル ページや SharePoint ソリューションを使用して展開された一部のカスタマイズ ページがレンダリングされません。
さらに、次のいずれかまたは複数のシナリオが発生することがあります。
シナリオ 1
ブロックされた非実体化ページに次のエラー メッセージのいずれかが表示されます。
-
属性 'autoeventwireup' はこのページで許可されていません。
-
属性 'enablesessionstate' はこのページで許可されていません。
-
このファイルでコード ブロックは許可されていません。
-
イベント ハンドラー 'OnSelectedIndexChanged' はこのページで許可されていません。
注: 最後のエラー メッセージのイベントは、"OnClick" など、他のイベントである可能性があります。
シナリオ 2
ブロックされた非実体化ページに次のエラー メッセージが表示されます。
UnsafeControlException: このページ上の Web パーツまたは Web フォーム コントロールは、表示またはインポートできません。この種類が見つからないか、安全なコントロールとして登録されていません。
シナリオ 3
ブロックされた非実体化ページに次のエラー メッセージが表示されます。
参照ファイル '/_layouts/somedirectory/affectedusercontrol.ascx' はこのページで許可されていません。
原因
非実体化ページはファイル システムに格納されます。それらのセキュリティ レベル は、サーバーサイド スクリプトと安全でないコントロールを禁止することで強化されています。次の条件に該当する場合、非実体化ページのレンダリングがブロックされる可能性があります。
-
非実体化ページにインライン コードまたはサーバーサイド スクリプトが含まれている。
-
分離コードの種類または Web パーツの種類が安全なコントロールとして登録されていません。
シナリオ 1 の解決方法
この問題を解決するには、Web.config ファイルの configuration/SharePoint/SafeMode/PageParserPaths 要素以下に VirtualPath 属性を持つ新しい PageParserPath 要素を追加します。
たとえば、次のエラー メッセージが表示されます。
"属性 'autoeventwireup' はこのページで許可されていません。"
この場合は、次のように PageParserPath 要素を追加します。
<SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="15" TotalFileDependencies="250" AllowPageLevelTrace="false">
<PageParserPaths>
<PageParserPath VirtualPath="/<relativepath>/page.aspx" CompilationMode="Always" AllowServerSideScript="true" AllowUnsafeControls="true"/>
</PageParserPaths>
</SafeMode>
同じ仮想ディレクトリ内のすべてのページのブロックを解除する必要がある場合は、次のように PageParserPath 要素を使用します。
<SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="15" TotalFileDependencies="250" AllowPageLevelTrace="false">
<PageParserPaths>
<PageParserPath VirtualPath="/<relativepath>/*" CompilationMode="Always" AllowServerSideScript="true" AllowUnsafeControls="true" IncludeSubFolders="True"/>
</PageParserPaths>
</SafeMode>
-
VirtualPath は、ブロックされるページのパスです。
-
VirtualPath は、非実体化されていて、どのユーザーも非実体化を解除できないページ、またはそのようなページを含むディレクトリを指している必要があります。
-
VirtualPath は、非実体化を解除できる別のページまたはマスター ページを参照していないページ、またはそのようなページまたはマスター ページを含まないディレクトリを指している必要があります。
-
DirectFileDependencies は、許可されている直接ファイル依存関係の数を示します。"the number of allowed direct file dependencies exceeds the limit" (許可されている直接ファイル依存関係の数が制限を超えています) などのエラー メッセージを受け取る場合は、この値を変更します。
シナリオ 2 の解決方法
この問題を解決するには、「SafeControls 要素 (ソリューション)」の説明に従って、Web.config ファイルの configuration/SharePoint/SafeControls 要素以下に、指定された型、名前空間、およびアセンブリの厳密な名前の新しい SafeControls 要素を追加します。次に、Safe 属性を TRUE に設定します。
SafeControls 要素の属性値の形式の詳細については、「方法: パッケージ デザイナーでのセーフ コントロールのマーク付け」の手順 12 の表を参照してください。
シナリオ 3 の解決方法
この問題を解決するには、Web.config ファイルの configuration/SharePoint/SafeControls 要素以下に Src 属性を使用する新しい SafeControls 要素を追加します。
たとえば、次のエラー メッセージが表示されます。
"参照ファイル '/_layouts/somedirectory/affectedusercontrol.ascx' はこのページで許可されていません。"
この場合は、次の例のように SafeControls 要素を追加します。
< SafeControls>
<SafeControl Src="~/_layouts/somedirectory/*" IncludeSubFolders="True" Safe="True" AllowRemoteDesigner="True" SafeAgainstScript="True" />
</SafeControls>
< SafeControls> <SafeControl Src="~/_layouts/somedirectory/*" IncludeSubFolders="True" Safe="True" /> </SafeControls>