カテゴリー「ScottGu's Blog」の記事

2007年4月 9日 (月)

[ScottGu's Blog] New "Orcas" Language Feature: Lambda Expressions

ScottGu's Blogの意訳です。

誤りがあれば連絡下さい。

今回はうまく訳せなかったので、概要部分のみです...

New "Orcas" Language Feature: Lambda Expressions

“Orcas”言語新機能: ラムダ式

Last month I started a series of posts covering some of the new VB and C# language features that are coming as part of the Visual Studio and .NET Framework "Orcas" release.  Here are the first two posts in the series:

Today's blog post covers another fundamental new language feature: Lambda Expressions.

What are Lambda Expressions?

ラムダ式とは?

C# 2.0 (which shipped with VS 2005) introduced the concept of anonymous methods, which allow code blocks to be written "in-line" where delegate values are expected.

VS2005で提供したC# 2.0 では匿名メソッドを導入しました。これはコードブロックをデリゲートパラメータとして渡すために使われます。

Lambda Expressions provide a more concise, functional syntax for writing anonymous methods.  They end up being super useful when writing LINQ query expressions - since they provide a very compact and type-safe way to write functions that can be passed as arguments for subsequent evaluation.

ラムダ表現は匿名メソッドを記述するためにさらに簡潔な方法を提供します。LINQを使うとき、ラムダ表現はさらに便利な機能を提供します。非常に簡潔でタイプセーフな方法を提供します。

| | コメント (0) | トラックバック (0)

2007年4月 7日 (土)

[ScottGu's Blog]Tip/Trick: Enabling SSL on IIS 7.0 Using Self-Signed Certificates

ScottGu's Blogの意訳です。

誤りがあれば連絡下さい。

Tip/Trick: Enabling SSL on IIS 7.0 Using Self-Signed Certificates

Tips: IIS7で自分で発行した証明書を使ってSSLを使用する方法

SSL enables browsers to communicate with a web-server over a secure channel that prevents eavesdropping, tampering and message forgery.  You should always use SSL for login pages where users are entering usernames/passwords, as well as for all other sensitive pages on sites (for example: account pages that show financial or personal information).

SSLWebサーバとブラウザ間の通信の盗聴や改ざんを防ぐための技術です。ログインページやユーザ名/パスワードを入力するページでは使うべきだし、機密性の高い情報情報(アカウントページやカード情報や個人情報)を扱うときも同様です。

Configuring SSL on Windows with previous versions of IIS has been a pain.  Figuring out how to install and manage a certificate, and then associate it with a web-site, is something I bet most web developers don't know how to enable.

IIS7より前のバージョンではSSLを構成するのは難しかった。証明書をどうインストール・管理して、Webサイトに関連づけるといいのかは多くの開発者は知らなかった。

The good news is that IIS 7.0 makes it radically easier to configure and enable SSL.  IIS 7.0 also now has built-in support for creating "Self Signed Certificates" that enable you to easily create test/personal certificates that you can use to quickly SSL enable a site for development or test purposes. 

IIS7ではSSLの構成が簡単になっています。IIS7では開発やテスト用に自己署名の証明書を簡単に使う事ができる機能が組み込まれます。

Using IIS 7.0 you can SSL enable an existing web site in under 30 seconds.  The below tutorial demonstrates how to-do this.

IIS7を使えば30秒以内で既存のWebサイトをSSL対応にする事ができます。以下に手順を示します。

Step 1: Create a New Web Site

Step 1: 新しいWebサイトの作成

We'll start by creating a new web-site using the new IIS 7.0 admin tool.  This admin tool is a complete re-write of the previous IIS admin tool (and was written entirely in managed code using Windows Forms), and provides a more logical organization of web features.  It provides a GUI admin experience for all ASP.NET and IIS settings:

新しいWebサイトを作るためにはIIS7管理ツールを使うでしょう。このIIS7管理ツールは以前のIIS管理ツールを置き換えたものです。(マネージドコードのWindows Formsで作成されました)そしてより論理的に構成を行う事ができます。これはIISASP.NETの管理ができます。

To create a new site on the box, right click on the "Web Sites" node in the left hand tree-view pane and choose the "Add Web Site" context menu option.  Enter the appropriate details to create a new web-site:

左側のツリービューで「Web Sites」を右クリックし「Add Web Site」を選択してください。そして新しいWebサイトを作成するための情報を入力してください。

One nice feature of IIS7 on Windows Vista is that you can now have an unlimited number of sites on a box (previous versions of IIS on Windows Client only allowed 1 site).  The 10 simultaneous request limitation on Windows Client versions of IIS also no longer exists with IIS 7.0.

Windows Vista上のIIS7の特徴は無制限のサイトを登録できます。(以前のクライアントOSIISでは1つのサイトしか持てませんでした)クライアントOSIISであった同時リクエスト数10の制限もありません。

Once we've completed the above steps, we will now have a brand new site running on our IIS web-server.

この手順により、全く新しいサイトがIIS上で動作しているでしょう

Step 2: Create a new Self Signed Certificate

Step 2: 新しい自己署名の証明書を作成する

Before binding SSL rules to our new site, we need to first import and setup a security certificate to use with the SSL binding.

作成したWebサイトにSSLの設定をする前にSSLを使うための証明書を作成する必要があります。

Certificates are managed in IIS 7.0 by clicking the root machine node in the left-hand tree-view explorer, and then selecting the "Server Certificates" icon in the feature pane on the right:

左側のツリービューのルートのマシンノードをクリックし、右側のパネルで「サーバ証明書」アイコンを選択する事により証明書がIIS7で管理されます。

This will then list all certificates registered on the machine, and allow you to optionally import and/or create new ones.

ここでは証明書の作成やインポートができ、登録した証明書の管理が可能です。

I could optionally go to a certificate authority like Verisign and purchase a certificate to import using this admin UI.  Alternatively, I can create a "self-signed certificate" which is a test certificate that I can use during the development and testing of my site.  To-do this, click the "Create Self-Signed Certificate" link on the right-hand side of the admin tool:

証明証は、これまではベリサインのような認証局で購入する事ができました。その代わりに開発・テスト用途に使える自己署名の証明書を作る事ができます。ここで、右側のパネルで「Create Self-Signed Certificate」リンクをクリックしてください。

Enter a name to use for the certificate (for example: "test") and hit ok.  IIS7 will then automatically create a new self-signed crypto certificate for you and register it on the machine:

証明書の名前を入力してください。IIS7が自己署名の証明書を作成して登録するでしょう。

Step 3: Enable HTTPS Bindings for our New Site

Step 3: 新しいWebサイトでHTTPSを有効にする

To SSL enable the web-site we created earlier, select the web-site node in the left-hand tree-view, and the click the "Bindings" link in its "actions" pane on the right-hand side of the screen:

左側のツリービューでStep 1で作成したWebサイトを選択し、右側のパネルで「Bindings」リンクをクリックしてください。

This will then bring up a dialog that lists all of the binding rules that direct traffic to this site (meaning the host-header/IP address/port combinations for the site):

Web Site Bindings」ウィンドウが開きます。ここではhot-headerIPアドレスとポートの組み合わせを管理できます。

To enable SSL for the site, we'll want to click the "Add" button. This will bring up an "add binding" dialog that we can use to add HTTPS protocol support.  We can select the self-signed certificate we created earlier from the SSL certificate dropdownlist in the dialog, and in doing so indicate that we want to use that certificate when encrypting content over SSL:

SSLを利用可能にするために「Add」ボタンをクリックしてください。「Add Web Site Bindings」ウィンドウが開きます。「SSL certificate」ドロップダウンで先ほど作成した証明書を選択します。これによってこの証明書を使って通信内容の暗号化が行われます。

Click ok, and we now have SSL enabled for our site:

OKボタンをクリックして、SSLを使用可能にします。

Step 4: Test out the Site

Step 4: テストします

Add a "default.aspx" page to the site, and then try and hit it with the browser by typing https://localhost/default.aspx (note the usage of "https" instead of "http" to indicate that you want to connect over SSL).

ブラウザのURLhttps://localhost/default.aspxと入力してください。(httpでなくhttpsである事に注意してください)

If you are using IE7, you'll likely see this anti-phishing error message kick in

IE7を使ってるならフィッシングフィルタのエラーメッセージが見えるでしょう

Don't panic if this happens - it is just IE being helpful by suggesting that a self-signed certificate on your local machine looks suspicious. Click the "Continue to this website" link to bypass this security warning and proceed to the site.  You'll find that your default.aspx page is now running protected via SSL:

このメッセージを見ても驚かないでください。これは自己署名の証明書が怪しく見える事をIEが示してくれているだけです。このセキュリティ警告を回避してサイトを確認するために「このサイトの閲覧を続行する」リンクをクリックしてください。Default.aspxページがSSLで表示されている事が確認できるでしょう。

You are all done. :-)

Appendix: A Few Last SSL Notes

付録: SSL関連のメモ

  • The IIS 7.0 admin tool has an "SSL Settings" node that you can select for each site, directory or file that allows you to control whether that particular resource (and by default its children) requires an SSL request in order to execute.  This is useful for pages like a login.aspx page, where you want to guarantee that users can only enter their credentials when they are posting via an encrypted channel. If you configure the login.aspx page to require SSL, IIS 7.0 will block browsers from accessing it unless they are doing so over SSL.

    IIS7管理ツールの「SSL Settings」ノードは、SSLを要求するかどうかをコントロールするファイルやフォルダのリストを持っています。これはlogin.aspxのようなページに役立ちます。SSLを使ったリクエストの時にだけユーザ情報のPOSTが可能にできます。

  • Within an ASP.NET page or handler, you can programmatically check whether the current request is using SSL by checking the Request.IsSecure property (it will return "true" if the incoming browser request is over SSL).

    ASP.NETページやハンドラでSSLが使われたかどうかを確認するにはReqquest.IsSecureプロパティが使えます

  • You can set the "requireSSL" attribute on the <forms> configuration section within web.config files to have ASP.NET's forms-authentication system ensure that forms-authentication cookies are only set and used on SSL enabled pages and URLs.  This avoids the risk of a hacker trying to intercept the authentication cookie on a non-SSL secured page, and then trying to use a "replay attack" from a different machine to impersonate a user.

    Web.Configファイルでフォーム認証の設定時に「requireSSL」を使う事によりフォーム認証クッキーがSSL中でのみ使われる事を保証できます。これはハッカーが認証クッキーを捕まえて再送アタックを仕掛ける事を防ぎます。

For more information on IIS 7.0, please read my earlier IIS 7.0 overview blog post.  Also make sure to check out the www.iis.net website. 

IIS7に関する情報を取得するためにこちらも読んでください。そしてwww.iis.netサイトもチェックしてください。

To read more of my "Tips and Tricks" blog posts, please visit my Tips and Tricks Summary Page.

このほかのTipsTips and Tricksサマリーページにあります。

| | コメント (0) | トラックバック (0)

2007年4月 5日 (木)

[ScottGu's Blog] JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks

ScottGu's Blog の 意訳です。
誤りがあれば連絡下さい。

JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks

Recently some reports have been issued by security researchers
describing ways hackers can use the JSON wire format used by most
popular AJAX frameworks to try and exploit cross domain scripts within
browsers.

最近セキュリティ研究者によって、クロスサイトスクリプティングを
利用したハッカーが、有名どころのAJAX Frameworkで採用されている
JSONをねらっている事を公表しました。

Specifically, these attacks use HTTP GET requests invoked via an HTML
<script src=""> include element to circumvent the "same origin policy"
enforced by browsers (which limits JavaScript objects like
XmlHttpRequest to only calling URLs on the same domain that the page
was loaded from), and then look for ways to exploit the JSON payload
content.

特にこれらの攻撃は HTTP GET リクエストを使い、ブラウザのポリシーを
さけた形で使われます。

ASP.NET AJAX 1.0 includes a number of default settings and built-in
features that prevent it from being susceptible to these types of JSON
hijacking attacks.  Below are some details of how these attacks are
mitigated:

ASP.NET AJAX はこれらの JSON ハイジャックを防ぐためのデフォルト設定と
特徴を持っています。
以下にその特徴を記載します。

ASP.NET AJAX Web Methods do not enable HTTP GET requests by default

ASP.NET AJAX の Web メソッドはデフォルトではHTTP GETリクエストを
受け付けません。

~中略~

To make an ASP.NET AJAX web-method callable via HTTP GET-access, a
developer must explicitly attribute each method using ASP.NET's
ScriptMethod attribute (and set the UseHttpGet property to true):

Webメソッドで HTTP GET を使うためには属性をつける必要があります。

[WebMethod]
[ScriptMethod(UseHttpGet=true)]
public StockQuote[] GetQuotes(string symbol) {
}

~中略~

ASP.NET AJAX Content-Type Header Validation

コンテントタイプの検証

There is a built-in validation layer of protection that ASP.NET
enforces for both GET and POST based ASP.NET AJAX web methods, which
is that regardless of the HTTP verb being used, ASP.NET always
requires that the HTTP Content-Type header is set to the value
application/json.

Content-Type に application/json に設定されていることが要求されます。

~中略~

Summary

まとめ

ASP.NET AJAX 1.0 by default only allows the HTTP POST verb to be used
when invoking web methods using JSON, which means you can't
inadvertently allow browsers to invoke methods via HTTP GET.

ASP.NET AJAX はデフォルトで HTTP POST によってだけ Web メソッドを
呼び出せるようになっています。

ASP.NET AJAX 1.0 requires a Content-Type header to be set to
"application/json" for both GET and POST invocations to AJAX web
services.  JSON requests that do not contain this header will be
rejected by an ASP.NET server.  This means you cannot invoke an
ASP.NET AJAX web method via a <script src=""> include because browsers
do not allow append custom content-type headers when requesting a
JavaScript file like this.

ASP.NET AJAX では GET リクエストでも POST リクエストでも
Content-Type に application/json が設定されている必要があります。
これは<script src="">タグで Web メソッドを呼び出せない事を示しています。

| | コメント (1) | トラックバック (0)

その他のカテゴリー

devsumi2009 | ScottGu's Blog | WiMAX | スキルチャージ