書籍情報
Visual C#とASP.NET、ADO.NETなどについての本です。
書籍紹介ページ:http://www.ascii.co.jp/books/detail/4-7561/4-7561-4156-0.html
ASCIIの正誤表ページ:http://www.ascii.co.jp/books/support/4-7561-4156-0/errata/
ASCIIのダウンロードページ:http://www.ascii.co.jp/books/support/4-7561-4156-0/supplement/
おまけPDFは校正完了前のおまけなので正誤表については省略します(更に加えると、本来は「Visual C#.NETプログラミング入門」用に記述したのをこちらへ移動しようとしため、文章の繋がりが非常に悪い点があります)
最新情報
以下で(誤/正)は筆者のミスによるもの、(旧/新)はASP.NET 1.1での変更点や時代の変化に伴う修正です。
特に「危険な記述」の2項目は、.NET Framework 1.1においてはセキュリティ上誤った記述であり、本書の内容をそのまま適用するのは問題です。
危険な記述
P.022
- 新)下から6行目からの段落全体を削除します。
- 理由)HTTPのTRACEコマンドを利用することでHTTPリクエストのピンポンテストが可能となります。これはMicrosoft XMLHTTPのようなIEで利用可能なActiveXコントロールを利用することで、スクリプトからレスポンスを参照可能なことを意味します。
このため、BASIC認証を利用してアクセスすべき領域上にクロスサイトスクリプティング脆弱性を持つページがあれば、入力した認証情報を第3者が操作できてしまいます。
HTTPサーバーがTRACEリクエストを受け付けないように構成することでこの状態は解消できますが、少なくてもこの段落の記述内容である「メタデータは直接ページ内のスクリプトから操作はできない」は基本的に誤りです。ここにお詫びして訂正します。
- 参照)[memo:5237] XSS脆弱性によりBasic認証のパスワード情報が漏えいする
- 同じ理由から、P.120 上から17行目についても
- 旧)むしろクライアントサイドスクリプトやサーバー側プログラム……
- 新)むしろ通常の手段ではクライアントサイドスクリプトやサーバー側プログラム……
P.362全体(先頭の箇条書きを除く)本文1行目以降を以下と交換(2004/02/21修正)
- 新)さすがに、この方法は極端かも知れません。361ページで示したようにAll_Codeコードグループに単純に設定した場合、2.の部分には次に示す潜在的な問題点があるからです。
もし、キーペアを入手した開発メンバーが悪意を持つ場合、任意のインターネット上のサイトにトロイの木馬を仕掛け、そこへ善意の社員をメールなどで誘導することが可能となってしまいます。もし善意の社員が該当サイトを訪れるとイントラネットの業務処理用の署名がされたスマートクライアントが実行されてしまいます(ここでのシナリオでは厳密名によるコードグループで許可セットを変更していることを思い出してください)。このスマートクライアントは厳密名によって業務処理用の権限を与えられるため、業務処理アプリケーションが可能なことであればなんでもできてしまいます。
したがって、すべての開発者にキーペアを配布することは、将来にわたるリスクを抱えることになりかねません。
このような点まで考慮するのであれば、caspolによる設定時にAll_CodeではなくLocalIntranet_Zoneを設定し(リスト2-11の2行目の例であればcaspol.exe -ag LocalIntranet_Zone -strong -file アセンブリ名 -noname -noversion FullTrust -name ASCII_CO_JP
のように記述)、イントラネットゾーンからダウンロードされかつ該当厳密名を持つスマートクライアントに限定して権限を付与すべきです。この場合であれば、付与した権限で実行可能なスマートクライアントはイントラネット上のホストからのものに限定されるため、外部からイントラネットに侵入されない限り(もちろん侵入された場合にはWin32バイナリーからデータまでなんでも自由にされてしまうため問題外です)キーペアの管理は単純化できます。
- 変更理由)P.361での記述とP.362の記述の不整合を修正。元の記述にしたがってAll_Codeコードグループに対して設定する厳密名の元になるキーペアを単純に開発者に与えることは、Internetゾーンからのダウンロード実行が許可された.NET Framework 1.1では危機管理の観点からは上に示したように危険です。なお、.NET Framework 1.0では厳密名をエビデンスとしてFullTrustを付与してもInternetゾーンからの実行自体が制限されていたため、実行できませんでした。
変更された情報
P.016:下から8行目
- 旧)http://securit.elt.go.jp/
- 新)http://securit.gtrc.aist.go.jp/
P.016:下から6行目
- 旧)次のサイトおよびトップにリンクされている各サイト
- 新)次のサイトおよびトップにリンクされている[定番情報源]
- 理由)トップの各サイトへのリンクはなくなりました。かわりに[定番情報源]という別ページとしてまとめられています。
P.036 下から5行目
- 旧)ActiveState社
- 新)Sophos社
- 理由)買収によりActiveStateはSophos社の1部門となりました。
P.038 先頭行
- 誤)(Windows DNAやEJB)
- 正)(Windows DNAやJSPモデル2)
- 注)あまり厳密にこだわる必要は無いですが、EJBはさすがにここでは無関係です。
P.042 箇条書きの1.
- 旧)既定では%Windir%\Microsoft.Net\Framework\v1.0.3705。ただしv1.0.3705の部分
- 新)既定では%Windir%\Microsoft.Net\Framework\v1.1.4322。ただしv1.1.4322の部分
- 注)v1.1.4322はVS.NET 2003に付随する.NET Framework 1.1のバージョンです。
P.064 下から7行目
- 誤)入力が確定されると……
- 正)Enterキーを押したり他の行をクリックしてフォーカスを移すことで入力が確定されます。入力が確定されると……
- 注)元の記述が不親切だったのでついでに追加
P.073 表3-2 localOnly
- 誤)リモートからのトレースビューアの呼び出しを認めるか
- 正)トレースビューアの呼び出しをローカルホストからに限定するか
- 注)説明の意味は正しいですが、設定値について逆からの言い方をしています。trueに設定(デフォルト)した場合が、「ローカルホストからに限定」です。
P.075 図(2箇所)
- 誤)POST GET WebForm1.aspx
- 正)POST WebForm1.aspx
P.079からP.083にかけて
- ASP.NET 1.1についての補足:すばらしいことに、.NET Framework 1.1のASP.NET(ASP.NET 1.1)では、P.082の脚注1で記述されていることが現実のものとなりました。具体的には、@pageディレクティブに新たにvalidateRequest属性が追加され、しかもデフォルトが安全側になっています。なおこの属性はVS.NET 2003のデザイナ画面のDOCUMENTプロパティには表示されません。
設定は%windir%\Microsoft.NET\Framework\v1.1.4322\Config\machine.configのpages要素です。
参照:machine.config(抜粋)
....
validateRequest="[true|false]" // Default: true
-->
<pages buffer="true" enableSessionState="true" enableViewState="true"
enableViewStateMac="true" autoEventWireup="true" validateRequest="true"/>
これに伴い、本書のサンプルであるhijack.htmlはデフォルトでは実行できなくなりました。実行しようとすると参照:実行画面となります。また、リモートからのアクセスの場合には参照:実行画面となります。この表示は偶然タグを入力してしまったユーザーに対しては望ましくないため、表示内容を参照してweb.configのcustomErrors要素で別個作成した入力エラーを示すhtmlに置き換えたほうが良いでしょう。
どうしても実行してみたいのであれば、直接WebForm1.aspxのHTMLビューからpageディレクティブにvalidateRequest属性と設定値Falseを追加して試してみてください(リスト)。決してmachine.configを直接修正してはいけません。このような入力が必要なページは基本的にはあり得ないはずです。したがって、どうしても必要となるWebアプリケーションの該当するページについてのみ、pageディレクティブを設定してvalidateRequest属性の解除を行うべきです。
リスト
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="EchoServer.WebForm1" debug="False" validateRequest="False" %>
なお、この場合ビューステートが変わるためhijack.htmlを以下のもの(hijack-new.htmlのzip)と交換するか、あるいは普通に呼び出した状態のHTMLのソースから
<input type="hidden" name="__VIEWSTATE" value="dDwtMTgyODMwNDAzNjs7PtbprHxEFki/7thwf0I8RtZa0O3a" />
というような行を抜き出して、元のhijack.htmlの対応する行と置換してください。
ただしASP.NET 1.1で単純なXSS脆弱性に対しての防御がデフォルト化されたとは言え、他にもさまざまな攻撃手法があり得ます。したがって何が問題となるかについては、正しく認識しなければなりません。
- 参照:Adding Cross-Site Scripting Protection to ASP.NET 1.0
p.217 リスト4-2の周辺(2004/5/17)
- 旧)onclickが2重に作成される。
- 新)1つのonclick属性にまとめられる。
- 解説)したがって、CausesValidationをtrueに設定しても問題ありません。
誤植(タイポ)、書き間違えなど
ほとんどのタイポの指摘は、あおき様からです(2004/5/17の修正もあおき様からのご指摘を基にさせて頂きました)。どうもありがとうございます。ちなみにRHGのあおきさんではありません。
p.012 5行目
- 誤)WWWまたはW3C
- 正)WWWまたはW3
p.023 脚注
- 誤)一次資料となりま¥す。
- 正)一次資料となります。
p.026 脚注*13
- 誤)”XML is modular”
- 正)“XML is modular”
p.050 脚注
- 誤)デバッグ¥モード
- 正)デバッグモード
- 注)p.023にもありますが、この¥は誤植といって良いでしょう。現在は写植屋さんの手を経ないので実際は筆者か編集者のタイポなわけですが、このようなもの(多分EWBの処理ミス)は誤植と呼んでも良い思います。
p.085 箇条書き 4.
- 誤)扱われるはわからない
- 正)扱われるかはわからない
p.056 ●イベントハンドラの実装
- 文章中やソースは「Button_Click」となっているが、
図2-10では「Button1_Click」のように1がついている
P.146
- 誤)アプリケーションドメインの採用により、同一プロセス内に、……分離レベルを、同一プロセス内で実現することが可能となりました。
- 正).NET Frameworkの特徴をフルに生かして、異なるバージョンのアセンブリ、異なる……という従来であればプロセスレベルでなければ実現不可能だった分離レベルを実現した新たなアプリケーション境界、それがアプリケーションドメインです。
- 注)異なるバージョンのアセンブリは同一アプリケーションドメイン内であっても共存可能(な筈)なので、その点に関しては的外れですが、要するに、仮想マシンによってメモリー境界がきちんと作られているということです。
p.104 「例」
- 誤)System.Console.WriteLIne
- 正)System.Console.WriteLine
p.172 2行目
- 誤)最初にXMLデザイナのタブを[スキーマ]にしておいてから
- 正)最初にXMLデザイナのタブを[データセット]にしておいてから
p.180 リスト3-1 6行目(2004/5/17)
- 誤)users.ReadXml(Context.Server.MapPath("Users.xml"),
- 正)users.ReadXml(Context.Server.MapPath("/WebToDo/Users.xml"),
p.199 囲み記事内下から4行目
- 誤)regularexpressionvalidator
- 正)RegularExpressionValidator
p.204 !記事の上、1行目
- 誤)今度はエラーなり、読み込めない
- 正)今度はエラーとなり、読み込めない
p.246 2行目(2004/5/17)
- 誤)Windowsフォームフレームワーク
- 正)Webフォームフレームワーク
p.269 表1-1 属性名(2004/5/17)
- 誤)language
- 正)Language
p.300 最初の囲み5行目(2004/5/17)
- 誤)server
- 正)Server
p.362 箇条書き5. (2004/2/21追加)
- 誤)"..\\ascii_co_jp.snk"
- 正)"..\\..\\..\\ascii_co_jp.snk"
サンプルアーカイブch2-5sample#ToDoList\ToDoList.aspx.cs 221行目(2004/5/17)
- 誤)// テンプレートを使うようにしたため、SoretExpressionが使用できないので自力でソートする。
- 正)// テンプレートを使うようにしたため、SortExpressionが使用できないので自力でソートする。
戻る
Copyright(c) 2002-2004 arton
Last modified: Mon May 17 03:57:23 LMT 2004