SharePoint の非実体化ページがレンダリングされない

適用先
SharePoint Server 2019 SharePoint Server 2016 SharePoint Foundation 2013 SP1 Microsoft SharePoint Foundation 2010 Service Pack 2

現象

次のいずれかの更新プログラムをインストールした後、Microsoft SharePoint の一部の非実体化ページがレンダリングされなくなります。

たとえば、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>