IIS 7 版 mod_info、mod_status 的なもの

最近、イベントの登壇やらドキュメントの作成やらで、とんとコードを書く機会が無かったのですが、久々にひとつ書くことができました。 今回作成したのは Apache における mod_info や mod_status のようなものです。 作成に至った経緯はほかでもありません。 現在、IIS の師匠、奥主さんと二人で 『インターネット Web サーバー構築ガイドライン (ドラフト版) 』 というのを書いているのですが、その作業中に、奥主さんより、“Apache には動作状況を Web ブラウザから確認できる mod_info や mod_status というのがあるんだけと、IIS にはないみたいだから作って” と依頼されたためです。 そう、IIS7 では “ないものは作ってしまえ” ということが可能なのです。 というわけで、作成することになったのですが、いまさら Apache と同じものを作ってもあんまりクールじゃないなぁってことで、”IIS  における、IIS ユーザーのための、IIS による状態報告ツール” といういうことで IIS の構造に合わせて作成してみました。 また、情報の出力形式についても、人間だけでなく、アプリケーションからも使用できるようにしようということで、コンテンツの出力正式に複数のフォーマットをサポートするようにしました。 具体的には以下のような機能を持っています。   各 IIS オブジェクトのリソース状況のブラウザ表示 IIS 7 の構造に合わせ、”サーバー本体”、”Web サイト”、”アプリケーションプール”、”ワーカープロセス” に分かれて現在の状態が表示されます。またページ内のリンクをクリックすることで、目的のオブジェクトのさらに詳細な情報にアクセスすることができるようになっています。 図 : IIS リソース情報画面 たとえば、ワーカープロセスのページでは、現在処理を行っているリクエストの簡単な内容なども確認することができます。…

1

IIS7 の機能を拡張してみる-指定した言葉の出力禁止

IIS7 は ASP.NET とのパイプライン (リクエストを受けてからレスポンスを返すまでの処理) の統合により、パイプラインにかかわる処理を .NET のマネージコードで記述することができます。 リクエストのハンドリング方法については、既に機能を紹介していますので、今回はレスポンスはハンドリングし、その中のコンテンツを書き換える方法について紹介させていただきます。 この "コンテンツの内容を書き換える = 出力を行う" という処理は本来ハンドラで行う処理ですが、今回はモジュールを使用したものを紹介します。 そのため紹介さていただきますサンプルコードは、既にハンドラが設定されているページ、つまりは、*.aspx や *.php 等の、サーバーサイドで何らかの処理を行うページでしか動作しません。 それなのに、なぜあえてモジュールとして実装したかというと、ええ、….じつは私の勘違いでモジュールとして作ってしまったからです、はい(恥) 以前、php アプリケーション内のリンクを、フレンドリな短い URL に書き換えるというモジュールを作成したこともあり、"ASP.NET 以外のページでも動作 = 静的なファイルでも動作" と短絡的に考えていたのですが、今回モジュールを作り終えてテストしたところ、静的なファイルでは動作しないこと&理由が判明したしだいです。(すみません)   今回のサンプルの機能 のっけから非常に残念な感じの今回のサンプルなのですが、どういった機能を実装したかというと、レスポンス内のコンテンツから任意の言葉を伏字にするという機能です。 この機能を使用すると、任意に指定したワード (言葉) がコンテンツに含まれていた場合、代替えのキャラクタで置き換えてくれるため、サイトの訪問者の目に触れさせたくない言葉をブロックすることができます。 人によっては "そんな機能が本当に必要か? 必要なのか??" と考えられるかもしれません。 しかしどうでしょう、 たとえば、取引先の社の Web サイトを覗いたときに、そのコンテンツ内に公序良俗に反する言葉や、差別用語や、社会通念上許されざる言葉が平然と使用されていたとしたら、今後その会社と深いリレーションを築きたいと思うでしょうか? また、いくら仲の良い友人からのメールであっても、幼児の三大爆笑ワードである "ば〇、う〇こ、ちん〇ん" といったような、下品な言葉が毎回多用されていたりしたら、その人の品性と精神的健康状態について強い疑問を持たざるを得ないでしょう。 さらに"言葉" には、理解した瞬間に著しく相手の気分を害するものもあります。しかもそれは、人間の肉体に備わった機能ではブロックすることはできません。 たとえば、今、このドキュメントをお読みいただいているわけですが、ご自身の肉眼に実際に写っているものは、じつは "文字" でも "言葉" でなく、モニタ上に並んだ映像素子の点滅でしかありません。 モニタに表示された光のパターンを脳が文字と認識し、文字の並びから文としての解釈が行われ、私の言葉が"再生" (処理が実行) されているのです。 この一連の処理は、人間の読解における基本的な処理ですが、基本的であるがゆえにその一連の処理は無条件に実行され、解釈される内容の良し悪しにかかわらず、その実行は防ぎようがないのです。…

0

IIS7 の機能を拡張してみる-レスポンスヘッダー内のサーバー名の改ざん

Web サーバーが返す HTTP レスポンス内 のヘッダー Server には、Web サーバーの名前が含まれています。 以下は、実際に IIS 7.5 が返すレスポンスヘッダー中の Server の値です。 Server: Microsoft-IIS/7.5 この情報は、インターネットでどのような Web サーバーが使用されているかの調査等に利用されていますが、管理者の方からは、セキュリティの観点からこの情報を隠蔽、あるいは削除したいというご要望を受けることがあります。 残念ながら、IIS 7 の標準の機能では、この機能は提供されておりません。(※) (※) IIS 管理ツールにある [HTTP 応答ヘッダー] の機能を使用してカスタムヘッダーの追加/削除などは可能です しかし、先日の記事でご紹介したように、.NET を使用して IIS の機能を拡張することでその機能を実装することができます。 この処理に使用する コードの量は非常に少なくシンプルであり、コンパイルも不要かつ、配置も容易ということで、驚くほど簡単にその機能を実装することが可能です。 セキュリティを強化するため、使用している Web サーバーが Microsoft 社の Internet Information Server 7 であることを世間の目からひた隠しに覆い隠す、という行為は、セキュリティの向上という観点から理解できますが、しかし、これは、あくまでも私一個人の心情の問題にすぎないのですが、日々仕事で IIS にかかわる者としては少々複雑な気分にならざるをえません。 たとえばもし、お子さんから "同級生に見られたくないから授業参観に来ないで"とか、あるいは恋人から "人に見られなくないから離れて歩いて" とか言われたらどうでしょう? この悲惨な心情たるや、あえてここで語るまでもないでしょう。 しかし、心ある人であればあるほど、無理をしてまで、その残酷な要求に笑顔で応えてしまうものなのです。 私が本日ここで、レスポンスヘッダーから IIS の名前を消すサンプルコードを紹介させていただくのも、もしかしたらそういう理由なのかもしれませんね。…

2

IIS7 の機能を拡張してみる-Hot Link (直リン) 禁止モジュール

IIS7 はパイプラインの変更により、.NET を使用してその機能を拡張することができます。 .NET を使用した IIS 7 の機能拡張については、詳しいセッションを過去に何度か行ったことがあるのですが、この機能に関しての記事をあまり見かけないので書いておきます。 .NET を使用した IIS 7 の拡張方法は大別すると、以下の方向性に大別されます。 リクエスト、レスポンスの応答処理 IIS 7 に対する操作 IIS 管理ツールの拡張 今回は リクエスト、レスポンスの応答処理 の中の、リクエストを処理を使用して Hot Link を禁止する方法をご紹介しましょう。 ちなみに Hot Link とは、Web サイトで公開しているコンテンツを、他の Web サイトが直接リンクして使用する行為です。"直リン" などと短縮して呼ばれることもあります。 "コンテンツへの直接のリンク" ということで、"Web に公開しているものに直接リンクしてなにが悪い?" と、疑問に思われる方もいらっしゃることてしょう。 たとえば、自分の Web サイトで、お宝画像、もとい、ユーザーから需要のある画像等を公開し、そのページに貼ったバナーのアフィリエイトで収益を上げているとしましょう。 ところが、他の Web サイトが、自分のサイトで公開している画像を <img> タグなどを使用して、さもその Web サイトが提供しているように公開していたらどうでしょう? "非常に腹立たしい"、のはもちろんなのですが、なんといっても他所のサイトの訪問者は、バナーの貼ってある自分のサイトのページにはアクセスしませんので、アフィリエイトが機能せず、経済的な損失も生じることになります。 そういった場合には、Hot Link をしている Web サイトに対して注意、警告する必要が出てくるわけですが、運営者が気弱だったり、相手が道徳心に欠けるような ならず者 だったりすると、たいがいの場合、泣き寝入りすることになります。…

0

おまけ:NTFS クォータエントリを設定するコード

現在、Tech days 2010 の準備と並行して、IIS TechCenter 向けに和訳された IIS.NET ドキュメントの監修作業を行っています。 そこで WMI でなく、DiskQuotaTypeLibrary (dskquota.dll) を使用したサンプルコードの載ったページを見つけたので、一足早く紹介させていただきます。 ココです↓ 『Provisioning Sample in C#』 http://learn.iis.net/page.aspx/285/provisioning-sample-in-c/ ただ一つ、非常に残念なことには、ここに掲載されているクォータのサンプルコード、AddUserDiskQuota メソッドは動作しません…Orz。 なぜなら DiskQuotaControlClass のインスタンスを取得するのに使用している GetDiskQuotaControl メソッドは DiskQuotaTypeLibrary に無いからです。 この GetDiskQuotaControl メソッドがこの地球上にどこかに本当に存在するか否かは別として、以下のようにインスタンスを取得するように記述しなおすことで、このサンプルコードは正常に動作するようになります。 DiskQuotaControlClass diskQuotaCtrl = GetDiskQuotaControl(diskVolume); ↓ 以下のように変更 DiskQuotaControlClass diskQuotaCtrl = new DiskQuotaControlClass(); diskQuotaCtrl.Initialize(diskVolume, true); 修正した AddUserDiskQuota メソッドの全体のコードは以下の通りです。 using DiskQuotaTypeLibrary; //windows\system32\dskquota.dll を参照設定 public static bool AddUserDiskQuota(string…

0

コードによるファイルスクリーン機能の実装

以前のブログの記事で公開しました IIS7.x での共有 Web ホスティングのためのサンプルアプリケーション について、以下の機能を追加予定でいます。 1. ディスククォータの制御 2. ファイルスクリーン機能の実装 3. データベースとデータベースの管理ユーザー作成 今回はファイルスクリーン機能をどのように実装するかについて書きたいと思います。 さて、その前にファイルスクリーンについて簡単に説明しておきましょう。 ファイルスクリーンとは ここで述べるファイルスクリーンとは、ディスクに配置されるファイルを選別 (screening) する機能です。 具体的には、ファイル名や拡張子により、ファイル種別を判別し、コピーを許可するか拒否するか、はたまた監視用にログに記録だけを残すかを指定することができます。 つまり、ユーザーにアップロードしてほしくないファイルがある場合は、コピーされないようにしたり、またはログだけを残して後で、うへへぇ~、とか言いながら (べつに言わなくてもいいですけど) 内容を確認するといったことができるのです。 ところで、アップロードされたくないファイルというのはどういうものがあるでしょう? たとえば、自分が Web サイトの共有サービスを運営していたとして、ユーザーの Web サイトに実行ファイルや、オーディオファイル、動画ファイルが山ほどアップロードされていたら、なんかドキドキしませんでしょうか? 実行ファイルは凶悪なウィルスかもしれませんし、違法コピーされたソフトウェアかもしれません。マルチメディアファイルは著作権やら公序良俗などに反しているかもしれません。 とくにマルチメディアファイルは内容のいかんにかかわらず、プログレッシブダウンロードで配信をされるとネットワークの帯域を圧迫する可能性があります。(※ IIS7.x には、プログレッシブダウンロード時の帯域を制御を可能するビットレートスロットリング モジュールが用意されており、 IIS.NET より入手して使用することができます。『Bit Rate Throttling』:http://www.iis.net/expand/bitratethrottling) そういった場合にファイルスクリーンの機能を使用して、これらのファイルのアップロードを拒否することが可能です。 この機能は、Windows Server 2008 に搭載されている ファイルサーバー リソース マネージャー (FSRM) の機能を使用することで実現することができます。 FSRM を使用した手動でのファイルスクリーンの方法については、お手数ですが以下のリンクの内容をご参照ください。 FSRM – 『ファイルスクリーンの管理』 http://technet.microsoft.com/ja-jp/library/cc732074.aspx FTP 7.5…

0

コードによるディスククォータの設定

先日のブログの記事で、IIS7.x Web サイト共有ホスティングサービスのための、プロビジョニング用のサンプルアプリケーションを公開させていただきましたが、早速アップデートの準備を進めています。 次のアップデートでは、以下の機能の追加を予定しております。 1. ディスククォータの制御2. ファイルスクリーン機能の実装3. データベースとデータベースの管理ユーザー作成 その中から、今回はディスク クォータの制御をどのように実装するかについて書きたいと思います。 Windows Server の 2 種類のクォータ機能 Windows におけるディスク クォータの機能は、Windows 2000 で NTFS ディスク クォータが初めて搭載され、Windows Server 2003 R2 からは、ファイルサーバー リソース マネージャー (FSRM) が提供する、記憶域によるクォータ機能が追加されました。 この二つのクォータの機能の違いはなにかというと、NTFS ディスク クォータは、ユーザーアカウント、セキュリティグループに対しディスクの使用量を制御するのに対し、 FRMS が提供するクォータの機能は、フォルダごと、ドライブごとに、個別に使用量を設定することができます。 ちなみに前者の NTFS ディスククォータは、Windows XP,Vista, 7 などのクライアント OS にも付属していますが、FSRM はサーバー OS のみに付属します。 この 2 つのディスククォータの具体的な使用方法については、以下のドキュメントをご参照ください。 [HOWTO] Windows Server 2003 のディスククォータを使用してディスク容量とディスクの使用を管理する方法』 http://support.microsoft.com/kb/326212/ja (※)…

0

IIS7.x での共有 Web ホスティングのためのサンプルアプリケーション

先日行われました、弊社パートナー ホスティング事業者様向けイベント向けに、セッションのデモで使用するサンプルアプリケーションを作成しました。 同イベントでの私のセッションは、体調 & マシン環境が万全でなく、トラウマになりそうなくらいの出来の悪さだったわけですが(笑、って、笑いごとではありませんが。。)、サンプルアプリケーションはちゃんと動作するのでここでご紹介させていただきます。 このサンプルアプリケーションは、IIS7.x の新機能である IIS 管理サービスを使用した簡単な 共有 Web ホスティングを行う際にプロビジョニングを行うものです。 具体的には以下の仕事をしてくれます。 インターネット インフォメーション サービスマネージャーユーザー(※以下、"IIS 管理ユーザー") を作成 Web サイト用の物理フォルダを作成 アプリケーションプールの作成 Web サイトの作成 作成した Web サイトに FTP をバインド 作成した Web サイトに、作成した IIS 管理ユーザーを管理者として登録 PHP ランタイムの設定 (※) ※Windows フォーム版のアプリケーションのみ実装。Web 版は UI の実装が間に合わず。 この処理が完了すると、ユーザーは、クライアントマシンにインストールされた IIS マネージャーから、作成された IIS 管理ユーザーアカウントを使用して、同じく作成された自分の管理可能な Web サイトに直接アクセスして管理することが可能になるのです。 ちなみにサンプルアプリケーションの画面はこんな感じです。 登録が完了すると、IIS マネージャーを使用して Web サイトに接続する手順が表示されます。 以前も書きましたが、IIS 管理サービスはポートを任意に指定可能で、かつ…

0