(57)【要約】【課題】スクリプト作成者が認可したコマンドの範囲でのみ、ユーザからの入力スクリプトを実行する。【解決手段】実行中にユーザからの入力スクリプト９の入力を行わせるメインスクリプト３を作成する作成者は、ユーザへ利用可能な認可コマンドを定義したＡＣＬを含めた、メインスクリプト３を記述する。インタプリタ５でメインスクリプト３を実行中、ユーザからの入力スクリプト９を解釈するときに、メインスクリプト３のＡＣＬをコピーし、該入力スクリプトの実行時にコピーしたＡＣＬを参照して、入力スクリプト９が認可コマンドを用いているか否かを検査し、実行可否を判定する。【選択図】　図１
2004005441.tif 000002
【特許請求の範囲】
【請求項１】
第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するスクリプト処理装置であって、
前記第一スクリプトプログラムに含まれる前記制限情報をコピーする制限情報コピー手段と、
前記制限情報コピー手段によってコピーされた該制限情報を参照しながら、前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段とを備え、
前記制限情報検査手段による判定結果が実行否の場合、実行中の前記第二スクリプトプログラムの実行を中止するようにしたことを特徴とするスクリプト処理装置。
【請求項２】
前記制限情報検査手段による判定結果が実行可の場合、実行中の前記第二スクリプトプログラムの実行を継続するようにしたことを特徴とする請求項１記載のスクリプト処理装置。
【請求項３】
前記制限情報は、利用可能なコマンドを定義したものであることを特徴とする請求項１または請求項２記載のスクリプト処理装置。
【請求項４】
前記制限情報は、利用不可なコマンドを定義したものであることを特徴とする請求項１または請求項２記載のスクリプト処理装置。
【請求項５】
ユーザが入力する入力スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む配布スクリプトプログラムの実行中に、前記入力スクリプトプログラムを実行するスクリプト処理装置であって、
前記配布スクリプトプログラムに含まれる前記制限情報をコピーする制限情報コピー手段と、
前記制限情報コピー手段によってコピーされた該制限情報を参照しながら、前記入力スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段とを備え、
前記制限情報検査手段による判定結果が実行否の場合、実行中の前記入力スクリプトプログラムの実行を中止するようにしたことを特徴とするスクリプト処理装置。
【請求項６】
第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するスクリプト処理装置であって、
前記第一スクリプトプログラムに含まれる該制限情報に基づいて、前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段と、
前記第一スクリプトプログラム及び第二スクリプトプログラムを実行するとともに、前記制限情報検査手段による判定結果が実行否の場合には、実行中の前記第二スクリプトプログラムの実行を中止する実行手段とを備えたことを特徴とするスクリプト処理装置。
【請求項７】
第一スクリプトプログラムの実行中に、第一のスクリプトプログラムとは異なる第二スクリプトプログラムの入力を受けて、該第二スクリプトプログラムを実行することが可能なスクリプト処理装置であって、
前記第一スクリプトプログラムに含まれる、前記第二スクリプトプログラムで利用可能なコマンドを定義した制限情報をコピーする制限情報コピー手段と、
入力された前記第ニスクリプトプログラムに、前記制限情報コピー手段によってコピーされた前記制限情報で定義した利用可能なコマンドを含むか否かを検査する制限情報検査手段と、
前記第一スクリプトプログラムおよび前記第二スクリプトプログラムを実行するものであり、前記制限情報検査手段の検査結果に基づいて前記第二スクリプトプログラムの実行可否を制御するスクリプト実行手段とを備えたことを特徴とするスクリプト処理装置。
【請求項８】
第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するスクリプト処理装置であって、
該第一スクリプトプログラムおよび該第二スクリプトプログラムを解析・実行する解析・実行手段と、
前記第一スクリプトプログラムに含まれる前記制限情報を参照しながら、入力された前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段とを備え、
前記制限情報検査手段から実行否の結果を受けたときに前記解析・実行手段の実行を中止するようにしたことを特徴とするスクリプト処理装置。
【請求項９】
前記制限情報検査手段で参照される前記制限情報を前記第一スクリプトプログラムからコピーする制限情報コピー手段を備えたことを特徴とする請求項９記載のスクリプトプログラム処理装置。
【請求項１０】
第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するインタプリタであって、
該第一スクリプトプログラムおよび該第二スクリプトプログラムを解析・実行する解析・実行手段と、
前記第一スクリプトプログラムに含まれる前記制限情報をコピーする制限情報コピー手段と、
前記制限情報コピー手段によってコピーされた該制限情報を参照しながら、入力された前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段とを備え、
前記制限情報検査手段から実行否の結果を受けたときに前記解析・実行手段の実行を中止するようにしたことを特徴とするインタプリタ。
【請求項１１】
第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、入力される前記第二スクリプトプログラムを実行するスクリプト処理方法であって、
前記第一スクリプトプログラムに含まれる前記制限情報をコピーし、
このコピーされた該制限情報を参照しながら、入力される前記第二スクリプトプログラムを検査することにより実行可否を判定し、
この判定が実行否の場合、前記第二スクリプトプログラムの実行を中止するようにしたことを特徴とするスクリプト処理方法。
【請求項１２】
第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、入力される前記第二スクリプトプログラムを実行するスクリプト処理方法であって、
前記第一スクリプトプログラムに含まれる該制限情報に基づいて、前記第二スクリプトプログラムを検査することにより実行可否を判定し、
前記第一スクリプトプログラム及び第二スクリプトプログラムを実行するとともに、前記判定が実行否の場合には、実行中の前記第二スクリプトプログラムの実行を中止するようにしたことを特徴とするスクリプト処理方法。
【請求項１３】
第一スクリプトプログラムを実行し、
この実行中に、前記第一スクリプトプログラムの実行によって第二スクリプトプログラムの入力を促し、
前記第二スクリプトプログラムの入力を受け、
前記第一スクリプトプログラムに含まれる制限情報に基づいて、入力された前記第二スクリプトプログラムの実行の可否を判断するようにしたことを特徴とするスクリプト処理方法。
【請求項１４】
第一スクリプトプログラムを実行し、
この実行中に、前記第一スクリプトプログラムの実行によって第二スクリプトプログラムの入力を促し、
前記第二スクリプトプログラムの入力を受け、
前記第一スクリプトプログラムに含まれる制限情報を記憶部へコピーし、
前記記憶部に記憶された前記制限情報に基づいて、入力された前記第二スクリプトプログラムの実行の可否を検査し、この検査の結果が実行否を示す時、第一スクリプトプログラムおよび第二スクリプトプログラムの実行を中止するようにしたことを特徴とするスクリプト処理方法。
【請求項１５】
第一スクリプトプログラムおよび第二スクリプトプログラムを実行する機能と、
前記第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムの入力を受ける機能と、
前記第一スクリプトプログラムに含まれる制限情報に基づいて、入力された前記第二スクリプトプログラムの実行の可否を判断する機能とを備えた、コンピュータに実行させるためのスクリプト処理プログラム。
【請求項１６】
第一スクリプトプログラムを実行する機能と、
この実行中に、第二スクリプトプログラムの入力を受ける機能と、
前記第一スクリプトプログラムに含まれる制限情報を、記憶部へコピーする機能と、
前記記憶部に記憶された前記制限情報を参照しながら、入力された前記第二スクリプトプログラムの実行の可否を検査する機能と、
該検査の結果が実行否を示す時、第二スクリプトプログラムの実行を中止する機能とを備えた、コンピュータに実行させるためのスクリプト処理プログラム。
【請求項１７】
入力スクリプトプログラムの入力を促進させる促進機能と、
前記促進機能により入力される入力スクリプトプログラムで利用可能なコマンドを制限するために記述された制限情報と、
前記制限情報に基づいて、前記促進機能により入力されたスクリプトプログラムの実行可否の検査、及び、該検査結果が実行否を示す時、前記入力スクリプトプログラムの実行中止を行わせる指示コマンドとを備えたコンピュータに実行させるためのスクリプトプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ユーザのコンピュータによってスクリプトプログラムが実行された際にユーザによって入力される新たなスクリプトプログラムの実行を制限するスクリプト処理装置、インタプリタ、スクリプト処理方法、スクリプト処理プログラム、およびスクリプトプログラムに関する。
【０００２】
【従来の技術】
近年、人間が記述したプログラムをその場で解析・実行する“スクリプティング技術（ｓｃｒｉｐｔｉｎｇ　ｔｅｃｈｎｏｌｏｇｙ）”が注目されている。スクリプティング技術は、ソフトウェア開発効率を大幅に向上させるので、特に変動の大きいＷｅｂサービス、コンピュータシステムの管理などの分野において多く用いられる。
【０００３】
スクリプティング技術は、人間にとって可読性の高いプログラムコードの文法｛Ｓｃｒｉｐｔｉｎｇ　Ｌａｎｇｕａｇｅ｝で記述されるスクリプトと、スクリプトを直接読み込んで解析・実行するインタプリタとで実現される。スクリプティング技術は、スクリプトをインタプリタで実行中に、ファイルシステム、ネットワーク、ユーザインターフェースなどを通じて新たな別のスクリプトを読み込み、実行することが可能である。このような機能はｅｖａｌと呼ばれる命令（ｃｏｍｍａｎｄ）として提供されることが多いため、以下では、このような機能を総称してｅｖａｌ機能と呼ぶこととする。なお、ｅｖａｌについては、例えば、非特許文献１に詳しく記載されている。
【０００４】
一方、ソフトウェアがアクセスできる資源を制限することでホストとなるシステムの破壊を未然に防ぐ技術として、アクセス制御リスト（ＡＣＬ　−　Ａｃｃｅｓｓ　Ｃｏｎｔｒｏｌ　Ｌｉｓｔ）に基づくアクセス制御技術が広く一般に用いられている。アクセス制御技術とは、主に、認証されたユーザの権限レベルに基づいてアクセス可能な資源を制限する技術である。ＡＣＬとは、特定の資源に対し特定のユーザがアクセス可能かどうかを判断する際に用いられる表である。認証されたユーザのレベルに基づいてアクセス権限を定めることを認可と言う。
【０００５】
プログラミング言語にアクセス制御技術を組み込んだ例としては、Ｊａｖａ（Ｒ）２のセキュリティ機構がある。Ｊａｖａ（Ｒ）２においては、クラスファイルのロード元、あるいはクラスファイルの持つ公開鍵認証情報に基づいてクラスの認証を行い、そのインスタンスの特定資源に対するアクセス権限をＡＣＬに基づいて制御する。ＡＣＬは、Ｊａｖａ（Ｒ）アプリケーションが実行される実行環境の管理者が、コンピュータシステムを守り、不正なプログラムの実行を防ぐために作成する。
【０００６】
スクリプティング言語にアクセス制御技術に類似した技術を用意した例としては、Ｐｅｒｌ言語のｔａｉｎｔモードや、ロータススクリプト言語のＡＣＬ、などが挙げられる。前者（Ｐｅｒｌ言語のｔａｉｎｔモード）は、ＡＣＬの変更は一切不可能であり、「プログラム外部から影響を受けたデータを使ってプログラム外部に何らかの影響を与えることは出来ない」という原則に従い、プログラム外部から得られたデータから派生するデータを用いたあらゆる外部アクセスが禁止される。なお、Ｐｅｒｌ言語のｔａｉｎｔモードについては、例えば、非特許文献２に詳しく記載されている。また、後者（ロータススクリプト言語のＡＣＬ）は、ロータスノーツシステムによって認証された特定のユーザが、特定の文書を読む権限（読者権）と編集する権限（作成者権）とを持つか否かを変更することが可能である。
【０００７】
【非特許文献１】
「Ｔｃｌ＆Ｔｋツールキット」，　Ｊ．Ｋ．Ｏｕｓｔｅｒｈｏｕｔ，　ＩＳＢＮ　４−８９−０５２８１９−９，ソフトバンク
【０００８】
【非特許文献２】
「プログラミングＰｅｒｌ第３版」Ｖｏｌｕｍｅ１，ラリー・ウォール他，　ＩＳＢＮ　４８７３１１０９７１，
オライリー・ジャパン
【０００９】
【発明が解決しようとする課題】
例えば、ネットワークに接続された複数台のコンピュータ間を移動し、それぞれのコンピュータを使用しているユーザの入力を受け取ってプログラムとして実行するようなスクリプトは、にとって各ユーザの入力が完全に安全であるとは確信できない。そこで、スクリプト作成者は、スクリプトの動作が想定したモデルの範囲内に収まるように、プログラム全体と、各ｅｖａｌ機能の利用部に対して任意の制限をかけられることが望まれる。
【００１０】
しかし、Ｐｅｒｌのｔａｉｎｔモードは、外部入力の影響下では一切の外部出力が許可されないのみで、プログラム作成者による制限内容の自由な設定が不可能であり、また、認可の根拠がオペレーションシステムに依存してしまう。
【００１１】
また、ロータススクリプトのＡＣＬは、静的な文書に対するアクセス権限のみを制御するもので、この問題の解決には応用できない。
【００１２】
本発明は、前記のような従来技術の問題点を解決するために提案されたものであり、スクリプトプログラム実行時に、実行するユーザへ追加のスクリプトプログラム（入力スクリプト）を入力させるような、スクリプトプログラムにおいて、入力スクリプトに対し、スクリプト作成者が認可したコマンドの範囲でのみ実行できるようにするスクリプト処理装置、インタプリタ、スクリプト処理方法、スクリプト処理プログラム、およびスクリプトプログラムを提供することを目的とする。
【００１３】
【課題を解決するための手段】
本発明は、第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するスクリプト処理装置であって、前記第一スクリプトプログラムに含まれる前記制限情報をコピーする制限情報コピー手段と、前記制限情報コピー手段によってコピーされた該制限情報を参照しながら、前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段とを備え、前記制限情報検査手段による判定結果が実行否の場合、実行中の前記第二スクリプトプログラムの実行を中止するようにしたことを特徴とする。
【００１４】
更に、前記制限情報検査手段による判定結果が実行可の場合、実行中の前記第二スクリプトプログラムの実行を継続するようにしても良い。
【００１５】
前記制限情報は、利用可能なコマンドを定義したものであることがより好ましい。
【００１６】
なお、前記制限情報は、利用不可なコマンドを定義したものであっても良い。
【００１７】
また、前記第一スクリプトプログラムは、配布スクリプトプログラムであり、前記第二スクリプトプログラムは、ユーザが入力する入力スクリプトプログラムであることが、より好ましい。
【００１８】
また、本発明は、第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するスクリプト処理装置であって、前記第一スクリプトプログラムに含まれる該制限情報に基づいて、前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段と、前記第一スクリプトプログラム及び第二スクリプトプログラムを実行するとともに、前記制限情報検査手段による判定結果が実行否の場合には、実行中の前記第二スクリプトプログラムの実行を中止する実行手段とを備えたことを特徴とする。
【００１９】
また、本発明は、第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムを実行するインタプリタであって、該第一スクリプトプログラムおよび該第二スクリプトプログラムを解析・実行する解析・実行手段と、前記第一スクリプトプログラムに含まれる前記制限情報をコピーする制限情報コピー手段と、前記制限情報コピー手段によってコピーされた該制限情報を参照しながら、入力された前記第二スクリプトプログラムを検査し、実行可否を判定する制限情報検査手段とを備え、前記制限情報検査手段から実行否の結果を受けたときに前記解析・実行手段の実行を中止するようにしたことを特徴とする。
【００２０】
また、本発明は、第二スクリプトプログラムで利用可能なコマンドを制限するための制限情報を含む第一スクリプトプログラムの実行中に、入力される前記第二スクリプトプログラムを実行するスクリプト処理方法であって、前記第一スクリプトプログラムに含まれる前記制限情報をコピーし、このコピーされた該制限情報を参照しながら、入力される前記第二スクリプトプログラムを検査することにより実行可否を判定し、この判定が実行否の場合、前記第二スクリプトプログラムの実行を中止するようにしたことを特徴とする。
【００２１】
また、本発明のスクリプト処理方法は、第一スクリプトプログラムを実行し、この実行中に、前記第一スクリプトプログラムの実行によって第二スクリプトプログラムの入力を促し、前記第二スクリプトプログラムの入力を受け、前記第一スクリプトプログラムに含まれる制限情報に基づいて、入力された前記第二スクリプトプログラムの実行の可否を判断するようにしたこと。
【００２２】
また、本発明のコンピュータに実行させるためのスクリプト処理プログラムは、第一スクリプトプログラムおよび第二スクリプトプログラムを実行する機能と、前記第一スクリプトプログラムの実行中に、前記第二スクリプトプログラムの入力を受ける機能と、前記第一スクリプトプログラムに含まれる制限情報に基づいて、入力された前記第二スクリプトプログラムの実行の可否を判断する機能とを備えた。
【００２３】
また、本発明のコンピュータに実行させるためのスクリプト処理プログラムは、第一スクリプトプログラムを実行する機能と、この実行中に、第二スクリプトプログラムの入力を受ける機能と、前記第一スクリプトプログラムに含まれる制限情報を、記憶部へコピーする機能と、前記記憶部に記憶された前記制限情報を参照しながら、入力された前記第二スクリプトプログラムの実行の可否を検査する機能と、該検査の結果が実行否を示す時、第二スクリプトプログラムの実行を中止する機能とを備えた。
【００２４】
また本発明のコンピュータに実行させるためのスクリプトプログラムは、入力スクリプトプログラムの入力を促進させる促進機能と、前記促進機能により入力される入力スクリプトプログラムで利用可能なコマンドを制限するために記述された制限情報と、前記制限情報に基づいて、前記促進機能により入力されたスクリプトプログラムの実行可否の検査、及び、該検査結果が実行否を示す時、前記入力スクリプトプログラムの実行中止を行わせる指示コマンドとを備えた。
【００２５】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
【００２６】
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための（あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための）プログラムとしても成立し、該プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【００２７】
本発明によれば、スクリプトプログラム実行時に、実行するユーザへ追加のスクリプトプログラム（入力スクリプト）を入力させるような、スクリプトプログラムにおいて、入力スクリプトに対し、スクリプト作成者が認可したコマンドの範囲でのみ実行できるようになった。
【００２８】
【発明の実施の形態】
以下、本発明の実施の形態を図面を用いて詳細に説明する。
【００２９】
本実施の形態における各「部」は、実施形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに１対１には対応する必要がない。特にインタプリタの内部構造はソフトウェアによって異なるが、本実施形態においてはその性質に反しない限り、どんな構造であっても良い。
【００３０】
また、以下では、スクリプト作成者が作成し、ユーザへ供給するスクリプトプログラムをメインスクリプトと呼び、また、ユーザがこのメインスクリプトを実行した際に、ユーザが新たに入力するスクリプトプログラムを入力スクリプトと呼ぶこととする。
【００３１】
図１は、本実施の形態に係るシステムの全体構成を示したものである。
【００３２】
コンピュータ１は、パーソナルコンピュータや、携帯電話などのような情報処理装置であって、文書編集を行なうエディタ部２を備えている。スクリプト作成者は、エディタ部２を用いて、メインスクリプト３を作成し、この作成されたメインスクリプト３を出力し、ユーザへ提供する。
【００３３】
コンピュータ４は、パーソナルコンピュータや、携帯電話などのような情報処理装置であって、メインスクリプト３を実行するインタプリタ５を備える。インタプリタ５は、一般にはソフトウェアプログラムであるが、これに限るものではない。インタプリタ５は、メインスクリプト３をコマンドラインごとに読み出して解析し、内部表現を生成し、実行する解析・実行部６を備える。なお、メインスクリプト３の解析・実行に関わる全てのコマンド、データなどの情報は、コンピュータ４のメモリ（ｎｏｔ　ｓｈｏｗｎ）上に保存され、利用される。
【００３４】
また、インタプリタ５は、メインスクリプト３の実行中にユーザからの入力スクリプト９を受け付ける場合に、スクリプト作成者によってメインスクリプト３の内部に予め定義してある、認可、あるいは／および、不認可するスクリプトコマンドの一覧（以下、ＡＣＬ（Ａｃｃｅｓｓ　Ｃｏｎｔｒｏｌ　Ｌｉｓｔの略）と呼ぶ）をコピーするＡＣＬコピー部７と、入力スクリプト９の実行時に、前記ＡＣＬコピー部７によってコピーされたＡＣＬを参照し、認可されていないスクリプトコマンドが用いられていないかを確認するＡＣＬ検査部８とを備えている。
【００３５】
次に、図２は、メインスクリプト３の作成に関するフローチャートである。
【００３６】
スクリプト作成者は、コンピュータ１のエディタ２を用いて、メインスクリプト３の作成を開始する（Ｓ１）。
【００３７】
スクリプト作成者は、自身が意図するメインスクリプト３を作成する（Ｓ２）。スクリプト作成者は、このメインスクリプト３の実行中に、このメインスクリプト３を利用するユーザへ入力スクリプト９を入力させることを意図した場合に、次の３つのステップ（Ｓ３−Ｓ５）を行う。
【００３８】
スクリプト作成者は、ユーザが入力する入力スクリプト９で用いることが可能なスクリプトコマンドの種類を制限するために、認可するコマンド、あるいは／および、認可しないコマンド等を決定し、これらをＡＣＬとして、ｓｅｔコマンドを用いて記述する（Ｓ３）。また、スクリプト作成者は、このメインスクリプト３を利用するユーザに対して、入力スクリプト９を入力させるためのコマンドを記述する（Ｓ４）。また、スクリプト作成者は、ＡＣＬ検査に基づきながら評価するコマンド（このコマンドを以下ではｅｖａｌコマンドと称する）に、設定されたＡＣＬを指す引数と、入力スクリプト９を置換する引数とを付加して、記述する（Ｓ５）。なお、上記のステップＳ３〜Ｓ５は、使用するスクリプト言語の種類によって、手順が前後しても良いことは勿論である。
【００３９】
これらステップＳ３−Ｓ５による記述以外の他のスクリプトコマンドの記述についてはフローチャート上明示していないが、スクリプト作成者は、他のスクリプトコマンド等も記述することによりメインスクリプト３の作成を完成し、終了する（Ｓ６）。エディタ部２は、この作成されたメインスクリプト３をユーザへ提供するために出力する（Ｓ７）。
【００４０】
次に、図３は、メインスクリプト３がインタプリタ５で実行される際の動作を示したフローチャートである。
【００４１】
ユーザは、スクリプト作成者によって作成されたメインスクリプト３を入手し、コンピュータ４のインタプリタ５を用いて、メインスクリプト３の実行を開始する。
【００４２】
解析・実行部６は、メインスクリプト３に、実行するコマンドラインがあるか否かを判断する（Ｓ１１）。この判断によって、実行するコマンドラインがない場合には、メインスクリプト３の実行を終了する。
【００４３】
一方、実行するコマンドラインがある場合には、解析・実行部６は、メインスクリプト３から、実行するコマンドラインを読み出して、そのコマンドラインの解析を行う（Ｓ１２）。
【００４４】
次に、解析・実行部６は、解析結果に含まれるコマンドがｅｖａｌコマンドであるか否かを判断する（Ｓ１３）。もし、この判断の結果、ｅｖａｌコマンドでなければ、解析・実行部６は、内部表現を生成し、内部表現に基づいて実行し（Ｓ１４）、ステップＳ１１へ戻る。
【００４５】
一方、ステップＳ１３によって、ｅｖａｌコマンドであると判断された場合には、解析・実行部６は、ｅｖａｌコマンドに付加された引数が指している「入力スクリプトを入力させるコマンド」を解析し、内部表現を生成し、内部表現に基づいて実行する（Ｓ１５）。これにより、コンピュータ４は、ユーザへ入力スクリプトの入力を促す。そして、ユーザは、入力スクリプト９を入力する。入力された入力スクリプト９は、一時保持される（Ｓ１６）。
【００４６】
次に、ＡＣＬコピー部７は、ｅｖａｌコマンドに含まれる別の引数が指しているＡＣＬをメモリ（図示しない）へコピーする（Ｓ１７）。
【００４７】
ここで、メインスクリプト３の実行は、一旦中断する。
【００４８】
解析・実行部６は、一時保持した入力スクリプト９を引数に置換し、置換した入力スクリプト９からコマンドラインを読み出して解析する（Ｓ１８）。
【００４９】
次に、ＡＣＬ検査部８は、ＡＣＬコピー部７によってメモリにコピーされたＡＣＬを参照し、解析結果に含まれるコマンドが、スクリプト作成者によって認可されたもので有るか否かを判断する（Ｓ１９）。ステップＳ１９の判断の結果、認可されたコマンドであれば、解析・実行部６は、そのコマンドを含むコマンドラインの内部表現を生成し、内部表現に基づいて実行する（Ｓ２０）。そして、入力スクリプト９に、次に実行するコマンドがないかを判断し（Ｓ２１）、あればＳ１８に戻る。
【００５０】
もし、ステップＳ１９の確認の結果、認可されないコマンドであれば、解析・実行部６は、そのコマンドライン以降の実行を中止し（Ｓ２２）、例えば、エラー表示してメインスクリプト３の実行を終了させる。
【００５１】
ステップＳ２１の判断の結果、次に実行するコマンドがなければ、入力スクリプト９は正常に実行を終了し、ステップＳ１１に戻る。これにより、中断されていたメインスクリプト３の解析・実行が再開される。
【００５２】
以上のように、本実施の形態において、ユーザへ入力スクリプト９の入力を行わせるメインスクリプト３を作成するスクリプト作成者は、入力スクリプト９に対し、認可したコマンドの範囲でのみ実行可能とするようにできるようになった。
【００５３】
なお、図３の説明は、各スクリプトプログラムのコマンドラインを一ラインづつ、解析し、実行することとして説明したが、各スクリプトプログラムの全てのコマンドラインを解析した後に実行するように構成しても良い。また、解析が実行より先行して実行されるように制御すれば、解析と実行とをそれぞれ別のプログラムで構成し、並列的に動作するようにしても良い。このようなバリエーションは、扱うスクリプト言語の仕様により異なるものである。
【００５４】
次に、上記で説明した本実施の形態の具体例を示し詳細に説明する。この具体例は、スクリプト言語の一つであるＴｃｌ言語によって、キャラクタの動的な表示を行うメインスクリプト３を例示したものである。
【００５５】
まず、スクリプト作成者は、図２のフローチャートによって、図４のメインスクリプト３を作成する。
【００５６】
ここで、図４のメインスクリプト３について簡単に説明する。
【００５７】
まず、ここで用いた記号について説明する。メインスクリプト３の「＃」を付した行に記述される文は、内容の要旨を示しているに過ぎず、実際にはその要旨を行うためのプログラムが記述されている。また、“｛｝”は、内部が一纏まりであることを示し、“＄”は、＄に続く変数名の値を置換したものを示し、“［］”は、中に示されるコマンドを実行した結果を置換したものを示す。
【００５８】
ｐｒｏｃコマンドは、関数を定義する（ｐｒｏｃｅｄｕｒｅ）コマンドであり、“ｐｒｏｃ　Ａ｛Ｂ｝｛Ｃ｝”のように表記する。Ａは定義する関数名を、Ｂはその関数で用いられる引数を、Ｃはその関数のボディをそれぞれ示す。メインスクリプト３では、ｐｒｏｃコマンドによってそれぞれ、“ユーザによってテキストエリアに書かれた文字列を取得する”関数“ｒｅａｄ−ｔｅｘｔａｒｅａ”、“現在向いている方向へ｛ｓｔｅｐ｝歩、歩く”関数ｗａｌｋ、“キャラクタの向きを｛ｎｕｍ｝だけ変更する”関数“ｄｉｒ”を定義している。
【００５９】
ｓｅｔコマンドは、値を設定する（ｓｅｔ）コマンドであり、“ｓｅｔ　Ａ｛Ｂ｝”のように表記する。Ａは変数（名）を、Ｂはその変数Ａに置換する値をそれぞれ示す。このメインスクリプト３では、ｓｅｔコマンドによって、変数ｍｙ−ａｃｌに、予め用意された「ｆｕｎｃｔｉｏｎ　ｄｅｆａｕｌｔ　ｄｅｎｙ（デフォルトではコマンドの実行を許さないの意味）、及び「ｆｕｎｃｔｉｏｎ　ａｌｌｏｗ　”ｗａｌｋ　ｄｉｒ”（ｗａｌｋ，　ｄｉｒコマンドは実行してもよいの意味）を代入する。
【００６０】
ｅｖａｌコマンドは、ＡＣＬ検査部７でＡＣＬのもと検査させながら評価する（ｅｖａｌｕａｔｅ）コマンドであり、“ｅｖａｌ　Ａ　Ｂ”のように表記する。ＡはＡＣＬを、Ｂは評価するものをそれぞれ示す。このメインスクリプト３では、ｅｖａｌコマンドによって、関数ｒｅａｄ−ｔｅｘｔａｒｅａを実行した結果を、Ａ、即ち“ｆｕｎｃｔｉｏｎ　ｄｅｆａｕｌｔ　ｄｅｎｙ，ｆｕｎｃｔｉｏｎ　ａｌｌｏｗ　”ｗａｌｋ　ｄｉｒ””のもとＡＣＬ検査部７で検査させながら、評価する。関数ｒｅａｄ−ｔｅｘｔａｒｅａは、ｐｒｏｃコマンドによって“ユーザによってテキストエリアに書かれた文字列を取得する”関数として定義したものであり、“ｆｕｎｃｔｉｏｎ　ｄｅｆａｕｌｔ　ｄｅｎｙ，ｆｕｎｃｔｉｏｎ　ａｌｌｏｗ　”ｗａｌｋ　ｄｉｒ””はＡＣＬであるから、換言すれば、ここで用いられるｅｖａｌコマンドは、ユーザ入力された文字列をメインスクリプト３で定義されたＡＣＬのもとＡＣＬ検査部７で検査させながら、評価するものである。
【００６１】
ユーザは、この図４のメインスクリプト３を入手し、コンピュータ４のインタプリタ５を用いて、図３に示した動作を開始する。図５乃至図７は、メインスクリプト３実行中のメインスクリプト３の内部表現を示している。
【００６２】
内部表現は、図示しないメモリに展開されるものであって、解析・実行部６は、コマンド実行する際には内部表現を生成しながら、生成した内部表現に基づき実行する。内部表現は、コマンド名とそのコマンドの引数とそのコマンドのボディとが対応づけて格納されるコマンドテーブルと、解析・実行部６によって実行されるコマンドテーブル内のコマンドの実行点を示すポインタと、変数名と変数の内容が対応づけて格納される変数テーブルとからなっている。なお、これらの図は、説明の理解を容易にするために、全てのコマンドラインの内部表現が生成済み（コマンドテーブルのｍａｉｎ）であるように示したが、本来は一コマンドラインづつ実行時に追加される。
【００６３】
解析・実行部６は、メインスクリプト３を解析し、内部表現を生成する。図５は、初期状態の、生成された内部表現を示したものである。図５のように、解析・実行部６は、コマンドテーブルにｍａｉｎを設け、その内容に処理順序を付けた解析結果を格納する。
【００６４】
次に、解析・実行部６は、ポインタが示す位置を順次実行して行く。解析・実行部６は、ここで、［０］から［２］までの各ｐｒｏｃコマンドを実行し、ｐｒｏｃコマンドによって定義されたコマンドと引数とそのコマンドを実行するプログラムの実体とを対応付けて、コマンドテーブルに追加される。このときの内部表現は、図６のようになる。図６において、コマンドテーブルには、ｒｅａｄ−ｔｅｘｔａｒｅａ、ｗａｌｋ、ｄｉｒの各行が追加されている。また、ポインタは、“ｍａｉｎ：３”となっている。
【００６５】
次に、解析・実行部６は、ポインタが示す［３］のｓｅｔコマンド呼び出しを実行する。ｓｅｔコマンドを実行すると、内部表現の変数テーブルに変数名とその置換される内容とを対応付けて格納される。このときの内部表現は、図７のようになる。図７において、変数テーブルの名前にはｍｙ−ａｃｌが、その内容には「ｆｕｎｃｔｉｏｎ　ｄｅｆａｕｌｔ　ｄｅｎｙ，ｆｕｎｃｔｉｏｎ　ａｌｌｏｗ　”ｗａｌｋ　ｄｉｒ”」が格納される。また、ポインタは、一つ進んで“ｍａｉｎ：４”となっている。
【００６６】
次に、解析・実行部６は、ポインタが示す［４］のｅｖａｌコマンド呼び出しを実行する。ｅｖａｌコマンドは、２つの引数、＄ｍｙ−ａｃｌと［ｒｅａｄ−ｔｅｘｔａｒｅａ］とを持っている。＄ｍｙ−ａｃｌは、ｍｙ−ａｃｌの内容「ｆｕｎｃｔｉｏｎ　ｄｅｆａｕｌｔ　ｄｅｎｙ，ｆｕｎｃｔｉｏｎ　ａｌｌｏｗ　”ｗａｌｋ　ｄｉｒ”」と置換される。一方、［ｒｅａｄ−ｔｅｘｔａｒｅａ］は、ｒｅａｄ−ｔｅｘｔａｒｅａをスクリプトプログラムとして扱い、コマンドテーブルからｒｅａｄ−ｔｅｘｔａｒｅａの内容（プログラム実体）を呼び出し、実行する。これによって、ユーザへ入力スクリプトの入力を促し、ユーザによって入力スクリプト９が入力される。
【００６７】
ここで、ユーザによって入力される入力スクリプト９は、１）正常な（スクリプト作成者が意図する範囲の）入力スクリプト９を入力した場合、２）間違った入力スクリプト９を入力した場合、の何れかである。これら２つの場合について、それぞれ例示しながら、以下に説明を続ける。
＜正常な入力スクリプト９を入力した場合＞
まず、ユーザが入力する入力スクリプト１０が、認可したコマンドのみが含まれた図８の入力スクリプト９である場合について説明する。この入力スクリプト９は、「画面上を向き」、「３歩歩いて」、「画面右に向かい」、「４歩歩く」ことを示している。この図８の入力スクリプト９を一時保持する。
【００６８】
解析・実行部６は、一時保持した（図８の）入力スクリプト９を解析・実行部６へ与えるとともに、ＡＣＬコピー部７によって、ｍｙ−ａｃｌ変数の内容をメモリの別の領域へコピーする。このｍｙ−ａｃｌの変数の内容は、スクリプト作成者が定義したＡＣＬである。コピーされたＡＣＬを図９に示す。ここで、メインスクリプト３の実行は、一旦中断され、入力スクリプト９の解析・実行へ移る。
【００６９】
解析・実行部６は、入力スクリプト９を解析し、この解析結果からメインスクリプト３とは異なる新たな別の内部表現を順次生成する。図１０は、入力スクリプト９から生成された内部表現を示したものである。
【００７０】
次に、解析・実行部６は、生成された入力スクリプト９の内部表現（図１０）を順次実行する。まず、解析・実行部６は、ポインタｍａｉｎ：０が指すｄｉｒコマンドを呼び出す。ＡＣＬ検査部８は、コピーしたＡＣＬを参照し、この呼び出したｄｉｒコマンドがスクリプト作成者に認可されたものであるか否かを検査する。この場合、ｄｉｒコマンドは、スクリプト作成者に認可されたものであるので、このｄｉｒコマンドを実行する。この実行が済むとポインタをｍａｉｎ：１にインクリメントする。この図８の例の入力スクリプト９の各コマンドは、何れも認可されたものであるから、このような手順を順次繰り返して、検査・実行できる。
【００７１】
入力スクリプト９が全て正常終了すると、中断していたメインスクリプト３の実行を再開する。ｅｖａｌコマンドは、上記のことを実行するコマンドであるから、これにより、ｅｖａｌコマンドの実行は終了したことになる。従って、解析・実行部６はメインスクリプト３の内部表現のポインタを１つ進める。これ以降の動作は、説明を省略する。
＜間違った入力スクリプト９を入力した場合＞
次に、ユーザが入力する入力スクリプト９に、認可していないコマンドが含まれた図１１の入力スクリプト９を入力した場合について説明する。この入力スクリプト９は、「画面上を向き」、「３歩歩き」、「２回飛んで」、「画面右を向き」、「４歩歩く」、ことを意図している。
【００７２】
解析・実行部６は、この入力スクリプト９（図１１）を解析し、この解析結果から、メインスクリプト３とは異なる新たな別の内部表現を順次生成する。図１２は、入力スクリプト９から生成された内部表現を示したものである。
【００７３】
次に解析・実行部６は、内部表現の実行を行う。まず、ポインタがｍａｉｎ：０とｍａｉｎ：１のときは、上記で説明した正常な入力スクリプト９を入力した時と同様、正常に動作する。
【００７４】
次に解析・実行部６は、ポインタｍａｉｎ：２が指すｊｕｍｐコマンドを呼び出す。ＡＣＬ検査部８は、コピーしたＡＣＬを参照し、スクリプト作成者に認可されたものであるか否かを検査する。この検査の結果、ｊｕｍｐコマンドは認可されていないと判断される。従って、この具体例では、ここで、入力スクリプト９（及びメインスクリプト３）の実行を中止する。
【００７５】
以上説明してきた本実施の形態では、スクリプト作成者が作成したメインスクリプト３は、スクリプト作成者の意図しない（認可しない）コマンドを含む入力スクリプト９をユーザに入力された場合には、実行できないように制御できるようになった。
【００７６】
換言すれば、本実施の形態によれば、スクリプトプログラム実行時に、実行するユーザへ追加のスクリプトプログラム（入力スクリプト９）を入力させるような、スクリプトプログラムにおいて、入力スクリプト９に対し、スクリプト作成者が認可したコマンドの範囲でのみ実行できるようになった。
【００７７】
【発明の効果】
本発明によれば、スクリプトプログラム実行時に、実行するユーザへ追加のスクリプトプログラム（入力スクリプト）を入力させるような、スクリプトプログラムにおいて、入力スクリプトに対し、スクリプト作成者が認可したコマンドの範囲でのみ実行できるようになった。
【図面の簡単な説明】
【図１】本実施の形態に係るシステムの全体構成を示した図。
【図２】メインスクリプト３の作成に関するフローチャート。
【図３】メインスクリプト３がインタプリタ５で実行される際のフローチャート。
【図４】メインスクリプト３の一例を示す図。
【図５】メインスクリプト３の全てのコマンドラインから生成された初期状態の内部表現の一例を示す図。
【図６】３つのｐｒｏｃコマンドの実行後の内部表現の一例を示す図。
【図７】ｓｅｔコマンドの実行後の内部表現の一例を示す図。
【図８】正常な入力スクリプト９の一例。
【図９】コピーされたＡＣＬの一例。
【図１０】入力スクリプト９から生成された内部表現の一例。
【図１１】間違った入力スクリプト９の一例。
【図１２】図１１の入力スクリプト９２に対応する内部表現の一例。
【符号の説明】
１、４・・・コンピュータ　　　　　２・・・エディタ
３・・・メインスクリプト　　　　　５・・・インタプリタ
６・・・解釈・実行部　　　　　　　７・・・ＡＣＬコピー部
８・・・ＡＣＬ検査部　　　　　　　９・・・入力スクリプト
【図１】
2004005441.tif 000003
【図２】
2004005441.tif 000004
【図３】
2004005441.tif 000005
【図４】
2004005441.tif 000006
【図５】
2004005441.tif 000007
【図６】
2004005441.tif 000008
【図７】
2004005441.tif 000009
【図８】
2004005441.tif 000010
【図９】
2004005441.tif 000011
【図１０】
2004005441.tif 000012
【図１１】
2004005441.tif 000013
【図１２】
2004005441.tif 000014