ネットワーク経由のAppleScript

AS Runnerなど,いくつかのソフトウエアはネットワーク経由でAppleScriptを実行することができます。ただし,その機能の利用はセキュリティの問題と背中合わせです。
ここでは,ネットワークに接続されたMacintoshのセキュリティの管理と,インターネット経由のAppleScriptについて解説します。

AppleScriptの二つの形態

本質的に,AppleScriptには二つの形態があります。それは,コンパイルされていない状態でのテキストデータと,コンパイル後のバイトコードです。
テキストデータの形態は,AppleScript英語やAppleScript日本語といった表現形式に依存しますが,テキストエディタなどで編集が可能であり,MacOS以外のプラットホームで編集・保存することが可能です。
一方,コンパイルを行いバイトコード化したAppleScriptは表現形式に依存せず,ただちに実行が可能ですが,Macintosh以外のプラットホームにおいて取り扱うのが困難です。ファイルに保存する際も通常はHFSフォーマットのディスク上においてリソースに保存されるため,インターネットのUNIXサーバなどで取り扱うためにはマックバイナリ等のエンコーディングの利用が不可欠でした。しかし,DataComponentObjectおよびAS Compilerを用いると,AppleScriptのバイトコードをデータフォークに保存することが可能になり,インターネット上での利用が簡単になりました。

二つのネットワーク

AppleTalkとTCP/IPのネットワーク概論で述べたように,Macintoshのネットワーク機能は主にAppleTalkとTCP/IPの二つがあります。AS Runnerはその両方に対応し,それぞれに対して別々の手法でAppleScriptの転送を実現しています。
AppleTalkに関しては,プログラムリンクによりAppleScriptを転送しています。これは漢字Talk7以降のMacintoshに標準で装備されたアップルイベントという機能を利用しています。AppleScriptそのものが本来はアップルイベントを記述するための言語なので,ネイティブの利用方法といえます。この際,コンパイル済みのバイトコードを転送することも,未コンパイルのテキストを転送することもできます。
TCP/IPではAppleScriptは正式には採用されていませんが,ascpt:という疑似プロトコル(実際にはネットワーク上を流れずにクライアント側のみで処理が完結します)によりAppleScriptをURLとしてHTMLに組み込むことが可能となっています。また,AppleScriptをファイルの形で保存して,それをHTTPやFTPプロトコルで転送し,クライアント側で実行させることができます。保存の際には,テキスト形式と,バイトコードのDataComponentObjectバイナリ形式のどちらも利用することができます。

AppleTalkネットワーク上のAppleScript

コントロールパネル「共有設定」には,「プログラムリンク」という項目があります。これは,AppleTalkネットワーク上をアップルイベントというシステムによって情報や命令をやりとりするためのものです。通常は,Macintosh同士のネットワーク対戦ゲームや,業務用のデータベース管理に利用されています。
AppleScriptはアップルイベントによって動く機能なので,AppleTalkネットワーク上でも命令をやりとりすることができます。この時,AppleScript自身をパラメータとして送信することが可能なのです。すなわち,AppleScriptはAppleTalkネットワーク上で転送することが可能なわけです。あとは,それを実際に送信したり受信するソフトウエアを作成するだけです。受け取った後に実行するソフトウエアを作成すれば,AppleTalkネットワーク上で遠隔制御が可能になります。送信側としてはスクリプト送信スクリプト,受信側としてはAS Runnerを用います。

AppleTalkのセキュリティ機能

AppleTalkネットワーク上でAppleScriptを転送して実行することができるということは,セキュリティ上は大きな問題となります。MacOSは防壁として機能する次のようなセキュリティ機能を持っています。
  1. 「セレクタ」でAppleTalkを「使用」にしない限り,AppleTalkネットワーク経由でのイベントは受け付けない。
  2. コントロールパネル「共有設定」で「プログラムリンク」を「開始」しない限り,AppleTalkネットワーク経由のイベントは受け付けない。
  3. コントロールパネル「利用者とグループ」で「プログラムリンク」を許可した登録利用者にしかAppleTalkネットワーク経由のイベントは受け付けない。
  4. 登録利用者としての利用に際してパスワードを要求することができる。
  5. Finderでファイルメニューの「共有...」から特定のアプリケーションのみに関してプログラムリンクを使用不可にすることができる。
実際のネットワークの運用上もっとも大切なことは,コントロールパネル「利用者とグループ」の「ゲスト」に対してプログラムリンクを許可しないことと,パスワードの管理を厳重に行うことです。
なお,当サイトで提供するスクリプト送信スクリプトは,これに加えて発信側と受信側の双方にログが記録されるようになっています。

インターネット経由のAppleScript(1) AppleScript-HTML

「ascpt:」という文字列の後にAppleScriptのスクリプトテキストをURLエンコードされたテキストで記述しておき,これをWWWページなどにHTMLで <A HREF=""> タグで記述しておきます。利用者がWWWブラウザ上でそれをクリックしたときに,URLテキストがデコードされ,AppleScriptにコンパイルされて実行されます。
この機能を実現させるためには,(1)WWWブラウザがascpt:を認識できる,(2)URLデコードを行う,(3)スクリプトテキストをコンパイルしスクリプトオブジェクトに変換する,(4)スクリプトオブジェクトを実行することが必要です。(1)を実現するのがNetscapeの場合はWWW Browser Protocol Switcherまたはインターネット設定(InternetConfig),(2)を実現するのが共有ライブラリCyberHandlerObj,(3)を実現するのが共有ライブラリAS Runner Object,(4)を実現するのがアプリケーションAS Runnerです。
AppleScript-HTMLのページで実例を詳しく述べています。HTMLをインターフェースとしたAppleScriptの利用が可能です。欠点としては,デコードとコンパイルに時間がかかるということと,ソースを簡単に見ることができるということです。

インターネット経由のAppleScript(2) テキスト形式

AppleScriptをテキスト形式でサーバに保存し.ascptなどの適当な拡張子を用いて,そこにリンクを張ります。利用者がWWWブラウザ上でそれをクリックしたときに,そのファイルがダウンロードされ,ヘルパーアプリケーションによってコンパイルされて実行されます。
この機能を実現させるためには,(1)httpサーバ側に拡張子.ascptのMIMEタイプにtext/x-AppleScriptを設定してある,(2)WWWブラウザに.ascptに対して上記のMIMEタイプとヘルパーアプリケーションとしてAS Runnerを指定してあることが必要です。欠点としては,デコードとコンパイルに時間がかかるということと,AppleScriptのソースを簡単に見ることができるということです。

インターネット経由のAppleScript(3) バイナリ形式

上記の方法と似ていますが,未コンパイルのスクリプトではなく,コンパイル済みスクリプトを用いる方法です。
この機能を実現させるためには,通常はリソースフォークに記録されているスクリプトをデータフォークに格納しバイナリーファイルを作成する必要があります。そのためには,DataComponentObject共有ライブラリをインストールし,AS Compilerを用いてスクリプトをリソースフォークからデータフォークに移動します。実行する側では,やはりDataComponentObject共有ライブラリをインストールし,AS Runnerでこのスクリプトバイナリーファイルを実行します。
再編集不可の逆コンパイルできないAppleScriptも利用できる点です。これはスクリプトの作者にとってはソースコードを保護することとなり有利ですが,利用者にとっては正体不明のAppleScriptが実行できるという危険性となります。
MIMEタイプとしてはapplication/x-AppleScriptなどを設定します。

インターネット経由のAppleScript(4) アクティブダウンロード

上記の方法では,Netscapeの場合,利用する度にダウンロードしたファイルが残ってしまいます。コンパイル済みのバイナリ形式のAppleScriptを指定したファイルにダウンロードしメモリに読み込んだ後,そのファイルを削除するようにすれば,余分なファイルは残りません。これを応用すれば,AppleScriptソフトウエアをインターネット経由で提供することも可能です。ユーザーが手元にファイルをいちいちダウンロードして保存する必要がないので,バージョンの管理やユーザーの管理が簡単になります。サーバやブラウザへのMIMEタイプの設定も必要ありません。NetscapeなどのブラウザからAS Runnerを起動するのではなく,AS Runnerがブラウザを制御して能動的にスクリプトをダウンロードさせることができます。
これを利用するためには,AppleScriptを組んでAS RunnerduwnloadObj(theURL) という命令を用います。対象となるデータはスクリプトのみならず,DataComponentObjectフォーマットの全てのデータファイルを利用することができます。

インターネット経由のAppleScript(5) CGI

CGIを利用して,WWWクライアントで入力されたスクリプトテキストをサーバ側でコンパイルして実行するものです。MacHTTPなどのサーバソフトが必要です。この場合,サーバがMacOSで動作しており,サーバ上にAS Runnerがインストールされていなければいけません。利用する度にコンパイルを行うので,動作が遅いのが欠点です。

インターネット上のセキュリティ

ネットワーク上でセキュリティが問題となる場合,端末上で動作するソフトウエアが他の端末からのプログラムや命令を受け入れることで問題が発生します。インターネット上において,UNIXならコマンドラインをOSが受け入れてしまうため,WindowsならActiveXなどがこれに当たります。Macintoshの場合,AppleTalkネットワーク上ではOSがAppleTalkを受け入れますが,インターネット上においてはOSが受け入れる特別なシステムはありません。しかし,WWWブラウザのプラグインやJavaは外部からプログラムを受け入れて実行する環境として動作するため,セキュリティを緩和しているのと同義です(AS Runnerも同様です)。ユーザーが自分自身のMacintoshを守るためには,不必要なプラグインは入れない,JavaやAppleScript,ActiveXなどの受け入れは最小限にとどめる,などの措置が必要です。
また,正体不明のソフトを不必要にダウンロードして試すのも良くありません。これも,ネットワークの向こうからプログラムを取り寄せて実行しているからです。そのプログラムがどのような内容のものか,制作者が信頼できる人物なのか,本当に期待通りに動作するのかなどを検討してみて下さい。過去には,実在する有名なソフトの振りをして,中身はまったく異なる悪意のあるソフトウエアだったということもあります。オンラインソフトウエアならば,きちんとサポートページからダウンロードするべきです。

関連ページ
   AS Runner Server CGI
   AS Runner CGIによるサーバの遠隔制御
   AppleScriptを組み込んだHTML
   ダイレクトアクセス機能
   スクリプト送信スクリプト


Copyright(C) 1994-1999 SUZUKI Kazufumi, All rights reserved.