blob: 989468a35456b08a1fb2b02cd45f1b337677457f [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../skin/tigris.css" type="text/css">
<link rel="stylesheet" href="../skin/mysite.css" type="text/css">
<link rel="stylesheet" href="../skin/site.css" type="text/css">
<link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
<title>WebServices - Axis</title>
</head>
<body bgcolor="white" class="composite">
<div id="banner">
<table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
<tbody>
<tr>
<td align="left">
<div class="groupLogo">
<a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
</div>
</td><td align="right">
<div class="projectLogo">
<a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
</div>
</td><td valign="top" rowspan="2" align="right" class="search">
<form target="_blank" action="http://www.google.co.jp/search" method="get">
<table summary="search" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input value="ja" name="hl" type="hidden"><input value="UTF-8" name="ie" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="検索" type="submit">
<br>WS を検索
</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
</tr>
</table>
</form>
</td>
</tr>
</tbody>
</table>
</div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
<tbody>
<tr class="status">
<td><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a></td><td id="tabs">
<div class="tab">
<span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
</div>
</td>
</tr>
</tbody>
</table>
<table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
<tbody>
<tr valign="top">
<td id="leftcol">
<div id="navcolumn">
<div class="menuBar">
<div class="menu">
<span class="menuLabel">Axis</span>
<div class="menuItem">
<a href="../index.html">はじめに</a>
</div>
<div class="menuItem">
<a href="../news.html">お知らせ</a>
</div>
<div class="menuItem">
<a href="http://wiki.apache.org/ws/ja/axis">FAQ/Wiki</a>
</div>
<div class="menu">
<span class="menuLabel">活動に参加</span>
<div class="menuItem">
<a href="../overview.html">概要</a>
</div>
<div class="menuItem">
<a href="../cvs.html">CVS リポジトリ</a>
</div>
<div class="menuItem">
<a href="../mail.html">メーリングリスト</a>
</div>
<div class="menuItem">
<a href="../ref.html">リファレンスライブラリ</a>
</div>
<div class="menuItem">
<a href="../bugs.html">バグ</a>
</div>
<div class="menuItem">
<a href="../howtobuild.html">サイト構築方法</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">Axis (Java)</span>
<div class="menuItem">
<a href="../java/index.html">ドキュメント</a>
</div>
<div class="menuItem">
<a href="../java/install.html">インストール</a>
</div>
<div class="menuItem">
<a href="../java/user-guide.html">ユーザガイド</a>
</div>
<div class="menuItem">
<a href="../java/developers-guide.html">開発者ガイド</a>
</div>
<div class="menuItem">
<a href="../java/integration-guide.html">統合ガイド</a>
</div>
<div class="menuItem">
<a href="../java/architecture-guide.html">アーキテクチャガイド</a>
</div>
<div class="menuItem">
<a href="../java/reference.html">リファレンスガイド</a>
</div>
<div class="menuItem">
<a href="../java/reading.html">読書ガイド</a>
</div>
<div class="menuItem">
<a href="../java/requirements.html">要件</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">Axis (C++)</span>
<div class="menuItem">
<a href="../cpp/index.html">Axis C++ 最新版</a>
</div>
<div class="menuItem">
<a href="../cpp/documentation.html">ドキュメント</a>
</div>
<div class="menuItem">
<a href="../cpp/download.html">ダウンロード</a>
</div>
<div class="menuItem">
<a href="http://wiki.apache.org/ws/FrontPage/AxisCPP">Wiki ページ [英語]</a>
</div>
<div class="menuItem">
<a href="../cpp/who.html">メンバ紹介</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">ダウンロード</span>
<div class="menuItem">
<a href="../releases.html">リリース</a>
</div>
<div class="menuItem">
<a href="../interim.html">暫定版</a>
</div>
<div class="menuItem">
<a href="http://cvs.apache.org/viewcvs/ws-axis/">ソースコード [英語]</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">翻訳</span>
<div class="menuItem">
<a href="http://ws.apache.org/axis/jp/">日本語</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">関連プロジェクト</span>
<div class="menuItem">
<a href="http://ws.apache.org/wsif/">WSIF [英語]</a>
</div>
<div class="menuItem">
<a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL [英語]</a>
</div>
<div class="menuItem">
<a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J [英語]</a>
</div>
<div class="menuItem">
<a href="http://www.uddi4j.org/">UDDI4J [英語]</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">その他</span>
<div class="menuItem">
<a href="../who.html">メンバ紹介</a>
</div>
<div class="menuItem">
<a href="../contact.html">連絡先</a>
</div>
<div class="menuItem">
<a href="../legal.html">法関連</a>
</div>
<div class="menuItem">
<a href="../docs.html">メモ/ドキュメント</a>
</div>
</div>
</div>
</div>
</div>
</td><td>
<div id="bodycol">
<div class="app">
<div align="center">
<h1>WebServices - Axis</h1>
</div>
<div class="h3">
<a name="WebServiceSecurity"></a>
<div class="h3">
<h3>Webサービスセキュリティ</h3>
</div>
<p>内容目次</p>
<ul>
<li>
<a href="#TheChallengeOfServerSecurity">サーバセキュリティの挑戦</a>
</li>
<li>
<a href="#IsSOAPFundamentallyInsecure">SOAP は根本的に安全ではない?</a>
</li>
<li>
<a href="#CommonAttackTypes">一般的な攻撃型</a>
</li>
<ul>
<li>
<a href="#SpecialXMLAttacks">特別な XML 攻撃</a>
</li>
</ul>
<li>
<a href="#AuthenticatingTheCaller">呼び出し側の認証</a>
</li>
<li>
<a href="#SecuringYourServices">サービスを安全にする</a>
</li>
<ul>
<li>
<a href="#XMLAttacks">XML 攻撃</a>
</li>
<li>
<a href="#SessionTheft">セッション泥棒</a>
</li>
<li>
<a href="#DOSAttacksViaLoad-intensiveOperations">負荷集中操作を介した DoS 攻撃</a>
</li>
<li>
<a href="#ParameterAttacks">パラメータ攻撃</a>
</li>
<li>
<a href="#CrossSiteScripting">クロスサイトスクリプティング</a>
</li>
</ul>
<li>
<a href="#SecuringAxis">Axis を安全にする</a>
</li>
<ul>
<li>
<a href="#Disguise">偽装</a>
</li>
<li>
<a href="#CutDownTheBuild">ビルドを削減する</a>
</li>
<li>
<a href="#RenameThings">改名</a>
</li>
<li>
<a href="#StopAxisServletListingServices">AxisServlet の、サービスのリスンを停止する</a>
</li>
<li>
<a href="#KeepStackTracesOutOfTheResponses">スタックトレースをレスポンスに入れさせない</a>
</li>
<li>
<a href="#StopAutogeneratingWSDL">WSDL の自動生成を停止する</a>
</li>
<li>
<a href="#Servlets2.3UseFiltersForExtraAuthentication">サーブレット2.3: 余分な認証のためにフィルタを利用する</a>
</li>
<li>
<a href="#LogThings">ログを取る</a>
</li>
<li>
<a href="#RunAxisWithReducedJavaRights">低減された Java 権利で Axis を実行する</a>
</li>
<li>
<a href="#RunTheWebServerWithReducedRights">低減された権利でWebサーバを実行する</a>
</li>
<li>
<a href="#MonitorLoad">負荷の監視</a>
</li>
<li>
<a href="#ConsiderTripwireAndHoneypotEndpoints">'tripwire (わなの針金)' エンドポイントと 'honeypot (密の壺)' エンドポイントを考慮する</a>
</li>
<li>
<a href="#MonitorTheMailingLists">メーリングリストをチェックする</a>
</li>
</ul>
<li>
<a href="#WhatToDoIfYouFindASecurityHoleInAxis">Axis でセキュリティホールを発見したらすること</a>
</li>
<li>
<a href="#AutomateSecurityTests">自動化されたセキュリティテスト</a>
</li>
<li>
<a href="#Conclusions">結論</a>
</li>
</ul>
<a name="TheChallengeOfServerSecurity"></a>
<div class="h4">
<h4>サーバセキュリティの挑戦</h4>
</div>
<p>ウェブサイトの標準的な攻撃は一般的に、欠陥のある CGI スクリプトを特定し、悪用することです。ファイルシステムへの読み取りアクセスを与えるものは全てセキュリティホールであり、サイトの裏側にあるコードを得ることが可能になります。それはたいていデータベースパスワードやその他の敏感なデータを含んでいて、さらに当然ながら下に横たわっているプラットフォームの核心部分があり、そこにはパスワード、クレジットカードリスト、ユーザ個人情報などの重要な情報を含まれています。このデータに対する認証されていないアクセスは厄介で高価なものとなりえます。</p>
<p>システムへの書き込みアクセスを与えればさらに悪用されることになり、外観を損なうウェブサイトが作成されたり、呼び出し側のデータを捕獲するなりすましエンドポイントが書かれたり、データベースが直接操作されたりします。</p>
<a name="IsSOAPFundamentallyInsecure"></a>
<div class="h4">
<h4>SOAP は根本的に安全ではない?</h4>
</div>
<p>
<a href="http://www.counterpane.com/crypto-gram-0006.html">Bruce Schneier</a> [英語] のようないくつかの人々は、SOAP はファイアーウォールを通り抜ける能力があるので、セキュリティ災害の卵であると主張しています。しかしながら HTTP 上の SOAP では、クライアントは SOAP 呼び出ししか行えず、呼び出しを受け取ることができないので、XML ファイルをWebサーバに POST するその他のアプリケーションと同様に、SOAP は安全ではないということはありません。サーバ (あるいはその DNS アドレス) が転覆していない限りクライアントは安全です。つまりサーバは攻撃を受けやすく、安全にする必要があります。</p>
<p>同様に <a href="http://webservices.xml.com/pub/a/ws/2003/03/04/security.html">Bilal Siddiqui</a> [英語] は、<i>SOAP は敏感なWebサービスと敏感でないWebサービスを区別することはできず、ユーザ認証、権限付与、アクセス制御をおこなうことができない</i>ということを主張しています。</p>
<p>同じように、これは過度のパニックのもう一つの例で、おそらく SOAP サービスの実装方法の知識の欠如が合わさっています。この著者のアドバイスに従って SOAP サーバを敏感レベルごとに切り離したり、XML と SOAP がファイアーウォールを意識したりする必要はなく、それよりもWebサーバを異なるユーザごとに切り離したり、ウェブサーバの一部を異なる IP アドレスに制限するためにルータを意識するよう HTTP に要求したりする必要があります。</p>
<a name="CommonAttackTypes"></a>
<div class="h4">
<h4>一般的な攻撃型</h4>
</div>
<ul>
<li>サーバへの DoS 攻撃</li>
<li>メッセージの傍受と操作</li>
<li>偽造クライアントリクエスト</li>
<li>偽造サーバレスポンス</li>
<li>サーバファイルシステム/データベースを読み込もうとする試み</li>
<li>サーバファイルシステム/データベースを書き込もうとする試み</li>
</ul>
<p>最も重大なセキュリティリスクは、あなたが呼び出しプログラムに機能を提供するためにコードを書いているという事実から来ます。もしその機能が違う人に提供されたら、あるいは書いたコードがセキュリティホールを生み出したら、その機能は "予期しない機能" となり、問題が発生します。</p>
<p>ウェブサイトの安全化について扱っている資料は多数あります。例えば <a href="http://www.owasp.org/">Open Web Application Security Project</a> [英語] の Top Ten List of vulnerabilities (攻撃されやすいトップ10リスト) と、その Guide to Building Secure Web Applications (安全なWebアプリケーションをビルドするためのガイド) があります。</p>
<a name="SpecialXMLAttacks"></a>
<div class="h2">
<h2>特別な XML 攻撃</h2>
</div>
<p>XML メッセージには、Webサービス作成者が知っておかなければならないいくつかの固有の脆弱性があります。これらの問題は全て、SOAP 特有のものではありません。入ってくる XML を処理しなくてはいけない人はこれらを知り、撃退する必要があります。</p>
<ol>
<li>大きな XML ドキュメント<br>クライアントが極端に長い/深い XML ドキュメント &lt;foo&gt;&lt;foo&gt;&lt;foo&gt;...&lt;/foo&gt;&lt;/foo&gt;&lt;/foo&gt; を送信すると、サーバ上で DOM パーサに悪影響を与え、メモリを消費します。すなわち DoS 攻撃です。ここで問題なのは、大きな XML ドキュメントを扱うコストは、それを生成するコストよりもはるかにかかるということです。</li>
<li>実体拡張攻撃<br>もし XML ドキュメントのヘッダがいくつかの再帰的な実体宣言を宣言していて、ファイルがそれらを参照していたら問題が発生します。Axis は バージョン 1.0 と 1.1 の間ではこれに免疫になります。</li>
<li>ファイルシステムを参照している実体<br>ローカルファイルを参照している実体を宣言し、それを拡張したとします。その結果、あなたはファイルを調べることになります。あるいはそのコピーをエラーレスポンス内で受け取ることにもなるでしょう。Axis はもはや実体をサポートしていないので、これに抵抗します。もしあなたのコードに、入ってくるメッセージから URL を解決する部分があれば、この問題を再現することができます。</li>
</ol>
<p>その他に XML について知っておかなければいけないことは、内容が安全であることを確認するのに文字列マッチングは十分ではないということです。なぜなら同じ XML を再フォーマットする方法がたくさんあるからです。</p>
<a name="AuthenticatingTheCaller"></a>
<div class="h4">
<h4>呼び出し側の認証</h4>
</div>
<p>新しいWebサービスセキュリティ提案は、あなたのエンドポイントに対する呼び出し側の認証と、同様にその逆 (呼び出し側に対するあなたのエンドポイントの認証) も提供します。Axis はまだこれを実装していませんが、<a href="http://xml.apache.org/security/index.html">姉妹プロジェクト</a> [英語] で XML 署名を提供しています。</p>
<p>その他のアプローチとしては、HTTPS を利用してトランスポートレベルで認証する方法があります。https をサポートするようにあなたのWebサーバを設定することは、確実に Axis ドキュメントの範囲外なので、サーバドキュメントを参考にしてください。Axis クライアントで https をサポートするには、クライアントのランタイム内で https サポートがあるか確かめる必要があります。Java1.4 以上であれば自動的にあります。古いバージョンであれば、Sun や代わりのプロバイダを通じて JSSE サポートを追加する必要があります。</p>
<p>両端で HTTPS が機能したのであれば次に、クライアントがサーバ証明書を信頼する必要があり、これは一般的には、中央認証局によって署名されたものであれば自動的に、ホームの認証であれば手動で行われます。</p>
<p>クライアントはクライアント証明か、HTTP 基本認証を用いて自身を認証できます。後者は暗号化されていないチャネル上では信頼性に欠けますが、HTTPS 上でも機能します。SOAP メッセージがエンドポイントに送信された時、<span class="codefrag">MessageContext</span> クラスに送信者のユーザ名とパスワードが設定されます。これらの値を調べるには適切な getter を利用します。Axis はサーブレット API 認証と<i>まだ</i>統合して<i>いない</i>ことに注意してください。認証の形式は、SOAP 呼び出しに関しては完全に axis が不要ですが、UserPrincipal の概念とサーバ設定との統合は、統合への動機を与えるでしょう。(これは開発者へのヒントです)</p>
<p>Axis は (まだ) HTTP1.1 ダイジェスト認証をサポートしていません。もしそれが追加されるとしたら <a href="http://jakarta.apache.org/commons/httpclient/">HttpClient</a> [英語] ライブラリ経由になるでしょう。</p>
<a name="SecuringYourServices"></a>
<div class="h4">
<h4>サービスを安全にする</h4>
</div>
<p>Webサービスのセキュリティホールのキーポイントの1つは、あなた自身が書いたコードです。Axis ソースほど多くの人の目で試験されるわけではありません。締め切りが厳密な試験の障害となり、複雑なWebサービスが守りたい貴重なアイテム、例えば private データ、データベース、その他のサーバなど、に結び付けられます。</p>
<p>この解決の鍵は、呼び出し側、すなわち呼び出し側の身元、呼び出し側の IP アドレス、呼び出し側のほとんど全てのデータを信頼しないことです。ここにいくつかの考慮すべき攻撃を挙げます。</p>
<a name="XMLAttacks"></a>
<div class="h2">
<h2>XML 攻撃</h2>
</div>
<p>この攻撃をリストの最初に持ってきました。もしあなたのサービスが添付で XML を受け取り、あるいは base-64 エンコードされた文字列で XML を受け取り、それを単独のドキュメントとして保存するのであれば、これら全ての攻撃にさらされることになります。取ってくるために、xlink や URL を記述するその他の方法を統合する標準 XML 文法、例えば SVG など、に注意しましょう。レンダラが許可された URL のみから取ってくることを保証する必要があります。</p>
<a name="SessionTheft"></a>
<div class="h2">
<h2>セッション泥棒</h2>
</div>
<p>Axis はセッション ID を生成するために優れた乱数生成器を利用していますが、暗号化されていない通信を傍受している誰かがセッションを乗っ取り、新しいメッセージを送信するかもしれません。送信元の IP アドレスなど、送信者情報を記録しておくと役立ちますが、セッション途中で呼び出し元を変えるプロキシシステム (例えば AOL) には注意しましょう。</p>
<a name="DOSAttacksViaLoad-intensiveOperations"></a>
<div class="h2">
<h2>負荷集中操作を介した DoS 攻撃</h2>
</div>
<p>処理に時間がかかるリクエストは全て DoS 攻撃の標的です。なぜなら CPU を拘束させるからです。長いリクエストの前に認証し、また現実に長い実行時間を探知する監視機構スレッドの導入を考えてください。バグが発生したらリクエストを受け付けないようにします。</p>
<a name="ParameterAttacks"></a>
<div class="h2">
<h2>パラメータ攻撃</h2>
</div>
<p>XML のパラメータが、データベースクエリや、有効データに依存するルーチンに直接入力される場合、そのデータの有効性を確認する必要が<i>あります</i>。そうしなければ悪意のある者が、システムを操作できるようなデータベース更新リクエストや、その他の文字列を送ることができてしまいます。これは、悪意のある者が、セッション中に設定したリクエストのユーザIDを変えるのと同じくらい簡単に行うことができます。データベース攻撃は SQL クエリ中にパラメータが挿入される状況で起こります。セミコロン ";" を挿入できることで、呼び出し側は完全に新しい SQL コマンドを最初の SQL コマンドの最後に付け加えることができ、そしてWebサービスの権限でそれを実行することができます。</p>
<p>悪意のあるパラメータから防衛する秘訣は、全てのデータの有効性を確認することです。要求する文字/正規表現のみを含む文字列だけを受け付け、その長さをチェックします。できたら'userID==session.userID'のようなあなたができるその他の高レベルチェックを適用したほうがいいでしょう。Prepared Statement は SQL 挿入に対する防衛の、後続の方法です。というのも JDBC ランタイムがエスケープの処理をするからです。手で SQL 文字列を試したりビルドしたりしないでください。これはセキュリティホールの製法です。</p>
<p>これは、セッション EJB オブジェクトの SOAP エンドポイントへのマッピングに対して、激しく異議を唱えるように見えるかもしれないことに注意してください。これは違います。セッション bean は、全ての入力データは信頼できず、それゆえにさらに処理を進める前に入力データの有効性を確認する、ということだけを想定していればいいのです。これはまさに<a href="http://martinfowler.com/eaaCatalog/serviceLayer.html"><i>サービス層</i></a> [英語] が行うべきタスク類です。</p>
<a name="CrossSiteScripting"></a>
<div class="h2">
<h2>クロスサイトスクリプティング</h2>
</div>
<p>理論的には、純粋なWebサービスは XSS 攻撃、少なくとも更新されたスクリプト (クライアントが表示するときに実行されるスクリプト) がサーバ側で HTML ウェブページとして表示されることに依存する XSS 攻撃、に対して免疫があるべきです。しかし Axis を用いて自分のWebアプリケーションと統合した瞬間、webapp の残りの部分に抜け穴があればまさにこの問題をさらすことになります。我々は Axis 自身が脆弱とは考えていません。なぜなら Axis は SOAPFault 中に提供されたデータを含めることができますが、これは HTML としてではなく XML として表示されるからです。私達が見逃したかもしれないこと、特に GET 処理、と同様に、この2つを区別できないクライアントが問題なのです。</p>
<a name="SecuringAxis"></a>
<div class="h4">
<h4>Axis を安全にする</h4>
</div>
<p>核心の哲学は、トラブルを監視しながら '徹底的に防衛する' ことです。</p>
<a name="Disguise"></a>
<div class="h2">
<h2>偽装</h2>
</div>
<p>ここで紹介する戦略の一つは、あなたが Axis を実行しているという事実を隠すことです。サービスを記述するために返信している全てのヘッダを見て、もし Axis を特定するものがあればソース内の定数を編集してください。自分自身のあいまいさが不十分であれば、攻撃をゆるめたり、既知のセキュリティホールに対して脆弱でないように見せることができます。</p>
<a name="CutDownTheBuild"></a>
<div class="h2">
<h2>ビルドを削減する</h2>
</div>
<p>必要としないものを除いて Axis を再ビルドします。これはとても偏執的な解決策ですが、潜在的な攻撃ポイントの数を減らすことができます。考慮に入れる1つの領域として、JWS ページの '瞬間 SOAP サービス' の機能が挙げられます。JSP ページと同様に JWS ページは、Webアプリケーションにテキストファイルを置くことのできる者に、任意の Java コードを実行する能力を提供します。</p>
<a name="RenameThings"></a>
<div class="h2">
<h2>改名</h2>
</div>
<p>AxisServlet、AdminService、また happyaxis.jsp でさえ、webapp 以下の良く知られた場所、デフォルトで 'axis' と名づけられた場所にあります。これら全てを、サーブレットに対しては web.xml、AdminService に対しては server-config.wsdd を編集することにより改名します。その他については単にあなたが改名できる JSP ファイルと WAR ファイルです。デプロイマシンにサーバ設定を一度生成すれば、AdminService は必要なくなります。</p>
<a name="StopAxisServletListingServices"></a>
<div class="h2">
<h2>AxisServlet の、サービスのリスンを停止する</h2>
</div>
<p>これを行うには Axis グローバル設定プロパティ <span class="codefrag">axis.enableListQuery</span> を false に設定します。</p>
<a name="KeepStackTracesOutOfTheResponses"></a>
<div class="h2">
<h2>スタックトレースをレスポンスに入れさせない</h2>
</div>
<p>デフォルトでは Axis は <i>production</i> モードで配布されていて、スタックトレースは呼び出し側に返信されません。設定の中で <span class="codefrag">axis.development.system</span> を true に設定すると、フォルト時にスタックトレースが通信路を経由して返信されます。これにより、脆弱性を探すのに利用されるかもしれない実装の内部情報をさらすことになります。</p>
<a name="StopAutogeneratingWSDL"></a>
<div class="h2">
<h2>WSDL の自動生成を停止する</h2>
</div>
<p>信頼できるパートナーには依然として電子メールやその他の手段で WSDL ファイルを渡すことができるとして、製品サーバで WSDL を返す必要はありません。どのようにして Axis が WSDL を返すのを停止することができるのでしょうか? <a href="reference.html#IndividualServiceConfiguration">個別のサービス設定</a>で説明されているように、単に空の &lt;wsdl/&gt; タグである WSDL リソースを返すように .wsdd 設定ファイルを編集します。</p>
<a name="Servlets2.3UseFiltersForExtraAuthentication"></a>
<div class="h2">
<h2>サーブレット2.3: 余分な認証のためにフィルタを利用する</h2>
</div>
<p>サーブレット 2.3 では、全ての入力リクエストを見て、あなたの好きなようにフィルタする (IP アドレス、呼び出し側の証明書などの有効性の確認をすることを含みます) ためにフィルタを利用することができます。他のエンドポイントが公開されていたとしても、管理サービスと管理ページを安全にするには、呼び出し側のアドレスの有効性を確認することが有用です。もちろんその場合ルータ設定も有用です。</p>
<a name="LogThings"></a>
<div class="h2">
<h2>ログを取る</h2>
</div>
<p>完全なログ取りはそれ自身 DoS 攻撃戦略ですが、誰がメッセージを送ったかログを取ることは、何が行われているかの軌跡を監査し保持する上でしばしば有用です。あなたがこれを行った方がいいと思う Axis 部分全てについて log4j タグを追加してください。</p>
<a name="RunAxisWithReducedJavaRights"></a>
<div class="h2">
<h2>低減された Java 権利で Axis を実行する</h2>
</div>
<p>Java は強力で複雑なセキュリティシステムを持っています。低減された権利でそれを利用して Axis を設定してください。Axis は、サーバ設定を更新する際は WEB-INF/server-config.wsdd へ、コンパイルされた .jws ページを保存する際はその他のどこか (設定可能) へ書き込もうとします。</p>
<a name="RunTheWebServerWithReducedRights"></a>
<div class="h2">
<h2>低減された権利でWebサーバを実行する</h2>
</div>
<p>これは Unix では大いに与えられていて、Windows NT やそれ以降のバージョンでさえサービスを異なるユーザで実行することができます。制限された権利でWebサーバを実行してください。システムの核心部分は、権利が制限されたユーザが、取得してはいけないものを取得しないように、核心部分へのアクセス許可を厳しくしてあることをよく確かめておいてください。</p>
<a name="MonitorLoad"></a>
<div class="h2">
<h2>負荷の監視</h2>
</div>
<p>DoS 攻撃を追跡記録するには負荷モニタが有用です。<span class="codefrag">AxisBaseServlet</span> はあらゆる時点におけるそのサブクラス内の呼び出し者の数を追跡記録し、<span class="codefrag">AdminServlet</span> はこのデータの取得方法を示します。</p>
<a name="ConsiderTripwireAndHoneypotEndpoints"></a>
<div class="h2">
<h2>'tripwire (わなの針金)' エンドポイントと 'honeypot (密の壺)' エンドポイントを考慮する</h2>
</div>
<p>エンドポイントの核心を移動して、管理エンドポイントの tripwire 実装、つまり Axis/AdminServlet 以下をリストアップしていて、そのそれぞれが、誰かが SOAP メッセージを送信するとアラートを送信するだけの honeypot エンドポイントを指し示しているなりすましエンドポイント、を作成してみてはいかがでしょうか。その場合、もちろんそのアラートに対する行動方針が必要になります。本当の honeypot は完全なバックエンドサービスを模倣します。構築して遊ぶのには興味深いちょっとした実験になるでしょう。</p>
<a name="MonitorTheMailingLists"></a>
<div class="h2">
<h2>メーリングリストをチェックする</h2>
</div>
<p>私達は、セキュリティについては問題があればいつでも axis-dev で議論する傾向がありますが、もし要望が多ければ重要な告知用に axis-announce メーリングリストを追加するかもしれません。</p>
<a name="WhatToDoIfYouFindASecurityHoleInAxis"></a>
<div class="h4">
<h4>Axis でセキュリティホールを発見したらすること</h4>
</div>
<p>最近多くの人がセキュリティホールを発見することによって名声を得ようとしていて、Apache 製品ファミリーの一部である Axis は潜在的な標的です。Axis のセキュリティホールは多くのWebサービスに脆弱性をもたらすので、実に深刻なものとなりえます。しかしこれまでほんの数個しか見つかっておらず、主に XML パースの気まぐれ以外の何者でもありません。</p>
<ol>
<li>パニックに陥らないで下さい。セキュリティホールを検証し、修正するプロセス体制があります。</li>
<li>プレスリリースをバグトラックに急いで投稿しないで下さい。私達に知らせて、さらにあなたが正しいことを検証してくださるとうれしいです。</li>
<li>(古い) リリースビルドではなく、最新の CVS 版に対してテストしてください。すでに修正されていることを望んでいます、ハッカーさん。</li>
<li>security@apache.org に電子メールを送ってください。公開されている axis-dev や jira には送らないで下さい。security エイリアスのメーリングリストは、全ての Apache プロジェクトからの代表者がいるメーリングリストであり、あなたの報告は深刻に受け止められます。</li>
<li>もし可能なら私達に修正をさせてください。そうすればあなたが発見を公表する際に、修正の準備ができていることを私達が公表することができます。この方法は発見者からいかなる名声をも取り上げません。単に人々がパニックに陥らないだけです。</li>
</ol>
<a name="AutomateSecurityTests"></a>
<div class="h4">
<h4>自動化されたセキュリティテスト</h4>
</div>
<p>もしセキュリティ問題を発見したら、その問題に関してアプリケーションとインストールの回帰テストを行うための、JUnit テストや HttpUnit テストのようなテストを書いてください。セキュリティホールを作るのが設定に関する問題である場合に、これは特に重要です。将来のインストールで再び同じ問題が起こることがほとんど避けられないからです。</p>
<a name="Conclusions"></a>
<div class="h4">
<h4>結論</h4>
</div>
<p>私達は、Webサービスセキュリティに関するいくつかの問題、あなた自身のサービス内で考慮すべきこと、Axis 自身を強健にする方法を紹介してきました。システムを安全にすることは、システムを機能させることよりもはるかに難しいです。ここで '機能させる' とは一般的には '1つ2つの危機的でないバグは OK' ということを意味しています。セキュリティの観点から言えば、安全であるべきシステムには確実にセキュリティホールがあります。セキュリティーホールが正体不明であろうとも誰かがそれを見つけてさらすでしょう。偏執的になりましょう。それが意味をなすことをあなたは知っているでしょう。</p>
<p>最後に、セキュリティの影響を懸念して SOAP サービスを書くことを放棄しないで下さい。パラメータを取る CGI-BIN や ASP/JSP ページは、SOAP エンドポイントと同じようにセキュリティリスクです。なんらかの理由からか、SOAP は無限のリスクについてのドラマチックな報道を引きつけますが、おろらく SOAP が新しくて未知だからでしょう。ですがそうではありません。SOAP は Webアプリケーションに送信される XML であり、それが全てです。それがあなたに恐怖を抱かせる場合に限り、SOAP サービスを書くべきではないでしょう。</p>
<div id="pdf" align="right">
<a href="security.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div id="footer">
<table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
<tbody>
<tr>
<td colspan="2">
<div align="center">
<div class="copyright">
Copyright &copy; 2000-2005&nbsp;The Apache Software Foundation. All rights reserved.
</div>
</div>
</td>
</tr>
<tr>
<td align="left"></td><td align="right">
<div align="right">
<div class="credit"></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>