現象
次のいずれかの更新プログラムをインストールした後、Microsoft SharePoint の一部の非実体化ページがレンダリングされなくなります。
- SharePoint Server 2019 のセキュリティ更新プログラムについて: 2020 年 9 月 8 日 (KB 4484505)
- 2020 年 9 月 21 日 SharePoint Server 2019 の更新プログラム (KB4461512)
- 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 の解決方法
この問題を解決するには、VirtualPath 属性を持つ新しい PageParserPath 要素を、構成/SharePoint/SafeMode/PageParserPaths 要素の下の Web.config ファイルに追加します。
たとえば、次のエラー メッセージが表示されます。
"属性 '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 は、許可される直接ファイルの依存関係の数を示します。 "許可される直接ファイルの依存関係の数が制限を超えています" などのエラー メッセージが表示される場合は、この値を変更します。
シナリオ 2 の解決方法
この問題を解決するには、「SafeControls 要素 (ソリューション)」で説明されているように、指定された型、名前空間、およびアセンブリの厳密な名前の新しい SafeControls 要素を、configuration/SharePoint/SafeControls 要素の下の Web.config ファイルに追加します。 次に、 Safe 属性を TRUE に設定 します。
SafeControls 要素の属性値の形式の詳細については、「方法: パッケージ デザイナーでのセーフ コントロールのマーク付け」の手順 12 の表を参照してください。
シナリオ 3 の解決方法
この問題を解決するには、src 属性を使用する新しい SafeControls 要素を configuration/SharePoint/SafeControls 要素の下の Web.config ファイルに追加します。
たとえば、次のエラー メッセージが表示されます。
"参照ファイル '/_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>