ASPについて共有する.NET中等安全モードのいくつかの経験【回転】



BBS、CMS、BLOGなど、汎用的なWeb製品を開発している場合は、以下の記事を読むことをお勧めします.
非汎用型のWebプログラムや製品は、通常ASPとはNETの中程度のセキュリティモードは、直面するユーザーグループが固定されているか、導入環境がプログラムプロバイダによって決定される可能性があるため、付き合います.
しかし、汎用型のWeb製品を作るときは、いろいろな人と付き合う必要があります.ある駅長は海外の空間を使っています.例えば、GoDaddy、外国の空間商は通常ASPを使います.NETコード実行権限は中程度のセキュリティモードに制御されます.
中程度の安全モードでは、私たちが慣れていることはできません.
中程度のセキュリティモードは何ですか?
 
多くの人が中等安全モードに触れたことがないかもしれませんが、bbsmaxプロジェクトに参加する前に、中等安全モードというものがあることを知りませんでした.
簡単に言えばASP.NETは、「信頼レベル」というコード実行権限を簡単に設定するスキームを提供しています.
デフォルトでは、FullTrust、High、Medium、Low、Minimalの5つの信頼レベルがあります.
各信頼レベルの設定は、コード権限設定のセットに対応します.
この案は、ウェブサイトの導入者がwebを通過できるようにする.configは、Webサイトの管理コードの実行権限を迅速に設定します.
Webを通じてconfigの/ノードのレベル属性値を設定、ASP.NETプログラムは異なる信頼レベルに設定されます.
ASP.NETのインストールが完了すると、すべてのサイトのデフォルトはFullTrust信頼レベルであり、最高信頼レベルでもあります.
本明細書で説明する「中程度のセキュリティ・モード」は、Medium信頼レベルに対応するものである.
管理コードの実行権限モデルは本論文の議論の重点ではないので、ここでは簡単な説明をするだけで、ASPについては深く議論しない.NETセキュリティレベル設定の実装原理は,本明細書で最後に示したいくつかの接続を参照できる.
中程度のセキュリティモードにはどのような影響がありますか?
 
以下は私と同僚のASPです.NETミッドセーフモードで発生した問題:
1.VirtualPathProviderに基づくテンプレートメカニズムは使用できません.VirtualPathProviderは少なくともHighモードで実行する必要があるためです.
2.BuildProviderが使えないのは、自分で自分の言語を追加して実現しても使えないことを意味しますが、ほとんどのプロジェクトではこのような高級なものは使いません.
3.CodeDom、Emitが使えなくなった.これは惨めだ.Ioc、AOP、ダイナミックに注入されたハイテクゲームは、すべて廃棄された.これらはCodeDomに基づいているのではなく、Emitに基づいている.
4.aspxページを通じてファイルのダウンロードを引き継ぐこともできなくて、Responseはファイルを書いてクライアントに流れてもっと高いコードの実行権限を必要とします.
5.大ファイルアップロードも考えないでください.大ファイルアップロードはHttpWorkRequstから離れないので、HttpWorkRequstのコードを取得するにはFullTrustモードが必要です.
6.SQLiteは使用できません.中程度のセキュリティモードでは非管理コード呼び出し権限がないため、SQLiteのほか、非管理コード呼び出しに関連するものも廃棄されます.
7.AccessデータはOleDbで接続できません.中程度のセキュリティモードではOleDbClientは使用できません.ODBCデータソースしか使用できません.
したがって、ユーザーが中程度のセキュリティ・モードにプログラムを導入できるようにすることを考慮すると、中程度のセキュリティ・モードの互換性テストを早く行うほど良いです.
多くの使えないものは、インフラストラクチャにかかわるからです.
例えば、SQLiteとAccessは使えません.あなたのプログラムがたまたまこの2つのデータベースのバージョンしかできなかったら、どうしますか.
例えば、ファイルのダウンロードはResponseを通じてファイルのストリームを書くことができなくて、あなたのプログラムはちょうどこのように防犯チェーンをして、どうしますか?
中等安全モードの要求がそんなに厳しいのに、どうやって対処しますか?
 
回り道しかできません.そうしないとどうしますか.方法はまだあるので、試し続けなければなりません.
VirtualPathProviderは使えないし、BuildProviderも使えないが、独自のテンプレート構文が必要だ.それはページアクセス前にaspxページを生成し、URLを書き換えるしかありません.
簡単に言えば、一言だけです.しかし、この間、私はどれだけのコードを書いたのか、何回の実験をして、やっと最適な案を見つけたのか分かりません.
だから、あなたの方法はやはり自分で探さなければなりません.
以下は、プログラムが中程度のセキュリティモードで実行されているかどうかを判断するコードです.
1
2
3
if (SecurityManager.IsGranted(new AspNetHostingPermission(AspNetHostingPermissionLevel.Medium)))
{
}

プログラムのメモリ占有率を取得したり、大きなファイルをアップロードしたりするなど、実行しなければならない論理がある場合は、呼び出しの有無を判断してから決定することができます.
資料によると、プログラムセットをGACに配備すると、FullTrustレベルの権限を得ることができますが、実際に試したことはありません.
付録A
 
参照リンク:
MSDN『trust要素(ASP.NET設置アーキテクチャ)』
MSDN 《How To: Use Medium Trust in ASP.NET 2.0》
《Check Code Access Security Permissions Granted to your asp.net web application》
付録B
 
で提供されるファイルダウンロードスキーム:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected override void OnInit(EventArgs e)
{
    Response.ContentType = "application/octet-stream";
 
    using (FileStream stream = File.Open(Server.MapPath("~/test.txt"), FileMode.Open))
    {
        BinaryWriter writer = new BinaryWriter(Response.OutputStream);
 
        byte[] buffer = new byte[1024];
 
        int l = 0;
 
        while ((l = stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            writer.Write(buffer, 0, l);
        }
    }