「Curlの動作・振る舞いについて」カテゴリーアーカイブ

Curlの仕様に関して、過去にお問い合わせの多かった事例を紹介いたします。記載日時点での状況(最新or問い合わせ時指定バージョンにおける仕様)を元に回答したものです。
 

Curlによる3DESの暗号化・複合化について

【ご質問】
Curl RTE にある 暗号化APIの3DESを用いようと思っていますが、
Curlアプリで暗号化したデータをJavaアプリやopenssl等
Curl外のプログラムで復号することができませんでした。
# 逆もできませんでした
# パスワードは同一のものを使用しており、
# Curlだけであれば暗号化・複合化か可能でした

3DESでは厳密には3つのパスワードが必要なところを
1つしかパスワードを必要しないことから、残り2つのパスワードを
内部で生成して暗号化・複合化しているものと推測しています。

Curlの3DESで暗号化したデータをJava等で復号する
(逆にJava等で暗号化したものをCurlで復号する)
ことは可能でしょうか?
可能な場合、どのようにすればよいのでしょうか?
# 内部のパスワードの生成方法等

【回答】
残念ながらCurlの現在の仕様では3つの異なったキーを
使用しての3DESの暗号/復号化には対応できません。

3DESでも”標準”のものにしか対応しておりません。

Curlのソースコードに対するセキュリティ関連の質問

◆ご質問◆

【質問1】
 ・ダウンロードされたCurl APはキャッシュにおかれるが、他から
  見られてしまうようなことはないか等、セキュリティについて
  教えて下さい。(フォルダの場所、PC上では暗号化されている 等)

【質問2】
 1)とかぶるところもありますが、
 ・Webサーバ上におかれているCurl APを他から参照、ダウンロード
  されてしまうことはないですか?
  具体的には以下です。
  【質問2-1】
  -start.curl はソースそのもののため、場所さえわかれば、ダウンロード
   できてしまうことはないか? 例えば、ドメインの直下にstart.curlを
   おいてしまうと、あてずっぽでもわかってしまうのではないか?
   start.curlがみれてしまうと、インポートしているpcurlの名称まで
   わかると思われます。
  【質問2-2】
  -pcurl自体は、圧縮されバイナリになっていますが、zipやlzhなどの一般
   的な圧縮方式ですか? 一般的な圧縮方式であれば、解凍できてしまうのでは
   ないかという懸念があります。

【質問3】
 ・Curl AP をダウンロード中は、httpsを使用していれば、暗号化されているという
  ことで、たとえ盗聴されても、内容まで解析される危険性は基本的にはないと
  考えてよろしいですか?

 

 

◆回答◆

【質問2】について
Webサーバ上に配置したCurl AP を構成するファイル、.curl、.scurl、
.pcurlファイルなどや画像ファイルは、インターネット上に公開されている
Webサーバであれば不特定多数から取得されることはあります。
ただ、これはCurlだから取得されてしまうのではなく、Webの仕組みとして取得できるようになっています。
(取得できないとWebのシステムが成り立ちません。)

【質問2-2】について
おっしゃるとおり、pcurlは圧縮されバイナリになっております。
ただ、圧縮のアルゴリズムは公開されておらず、単純にzipやlzh等の
ツールを使用して解凍して中身(圧縮前のソースコード)を見ることは
できないようになっております。

【質問2-1】について
Webの仕組み上、配置されているファイルのパスさえ分かってしまえば取得できるようになっています。
特に、manifestファイルには通常、パッケージ名とそのロケーションが
記述されていることがあるのでそれを見てしまえば、パッケージ名や
pcurlの名称は分かってしまいます。
ただ、ソースコートがpcurlになっている場合は、上記【質問2-2】での
回答でも書きましたが、中身は見えないようになっています。

【質問1】について
ここで言うキャッシュとは2つのものがあります。
ブラウザ等で使用されるキャッシュ、Curl RTEが言うキャッシュ。
まずは、ブラウザのキャッシュですが、これは単純にWebサーバから取得したファイル
(.curl、.scurl、.pcurlファイルなど)をローカルにコピーしているだけですので、
そのPCを利用している正規のユーザであれば見ることはできます。
ただ、pcurlファイルはバイナリであるので人が見ても判別することはできません。
次にCurl RTEが言うキャッシュですが、これは一度Curl RTEがコンパイルしたものを
保存しています。人が中身を見てソースコードを判別できるような状態で保存していません。

【質問3】について
SSL通信(https:での通信)はCurl APのダウンロードだけでなく
全ての通信を暗号化しているので基本的に通信の内容が分かることはありません。

dispatch-eventsについて

【ご質問】
通信のレスポンス待ちが長い状態の際、dispatch-eventsの呼出が
 
多くなってしまうようで、クライアントPCのCPU使用率が100%になってしまいました。 
 
CPU使用率を低下させるためにdispatch-eventsの呼出を 
 変更前:{dispatch-events false} 
 変更後:{dispatch-events true} 
と変更することで、概ね期待通りの改善が見られることを確認しましたが、
同じような処理になっている箇所が多数あるため影響の範囲が分からない状態です。 
 
①アプリケーションからdispatch-eventsを呼び出す場合、
 引数をfalse→true
 変更することで、懸念される影響は
 どのようなものがあるのでしょうか?
 
 
②どのように使い分ければいいのでしょうか。
 
③trueとした場合、イベントが何も起きなければ、 
 無限に停止してしまうことになるのでしょうか。

【回答】
{dispatch-events}はAPIリファレンスの注意事項にも記述があるように、
実行されるイベントが予期できず、結果として予期せぬ動作が生じることもあるため
慎重に利用する必要があります。

①について

影響に関してはプログラムに依存するため予測不可能です。
引数をfalseからtrueに変更することでイベントキューにイベントが入るまで
{dispatch-events}を実行しないのでCPUの利用率の低下が
見込めるかもしれませんが、その他への影響に関しては言及することは困難です。

②について
目的によって使い分けていただくことが必要になります。

③について
何かしらのイベントがイベントキューに入るのを待つため、
イベントが何も起きなけ
れば 無限に待つことになります。

最初に記載したように、{dispatch-events}は慎重に扱う必要があります
false→true への変更の際には十分なテストを行って下さい
 

RTEの自動更新について

◆ご質問◆

 ①「自動更新」が対象としているバージョンアップは、 
 メジャーバージョンアップを含むのでしょうか。 
 IDEのヘルプでは、以下のような記載しか見つけることができませんでした。 
  「Curl RTE には、重要な更新を定期的に確認してインストールする自動更新機能  
 追加されました。この機能はオプションで、Curl コントロール パネルから 有効にすることができます。」 

 ②マイナーバージョンアップで、動作の確認をしようと思いましたが、 
 思った通りの挙動になりませんでした。 
 プログラム上でなんらかのテクニックが必要なのか、それとも 
 ほかの問題や認識違いが存在するのか。お教え下さい。 
 インストールRTE  7.0.2 
 アプリケーション 7.0.3+ 
 の状態で、起動を試みると、WEBページが表示されるだけで、 自動更新されない。 
 RTEの終了時にも、自動更新は行われない。 

 ③実際に必要としている処理は、 
 現在利用している5.0.5から7.x.xへの自動更新です。 
 ユーザ側の負担を最小限にして、アップデートできる仕組みを検討しています。 
 もしadmin権限なしで、アップデート可能であれば、ベストです。 
 なにか、事例やアイデアはお持ちではないでしょうか? 
 現時点では、admin権限を持つ人が現場のPC1台1台に対して、 
 RTEの追加インストールを行うこと以外に、実現方法を持っていません。

◆回答◆

①、②について
自動更新の対象は、メジャーバージョンは含みません。
マイナーバージョンのみのアップデートとなります。
しかし、全ての新しいマイナーバージョンがアップデート対象と
なるわけではございません。

PCにインストールされているよりも新しいマイナーバージョンが
リリースされたとしても、その新しいマイナーバージョンが
“セキュリティ上重大なバグフィックスを含む”リリースであると
判断された場合のみに自動更新の対象となります。
お試しになった7.0.2→7.0.3は7.0.3が”セキュリティ上重大なバグフィックスを
含む”と判断されていないため自動更新の対象となっておらず、
更新されません。

③について
先に述べましたように自動更新の対象はメジャーバージョンを含んでいないため
Curl RTE 5.0.5がインストールされているPCからCurl RTE 7.0.xを自動更新する
事は残念ながら出来ません。

>  ユーザ側の負担を最小限にして、アップデートできる仕組みを検討しています。
一つはソフトウェア配布ツールを利用することが考えられます。
例えば、導入先がActiveDirectoryを利用したユーザ管理を行っている場合は、
Curl RTE 7.0.xはmsi形式のファイルとなっているためグループポリシーを利用して
ソフトウェアの自動インストールを行うことが出来ます。

もう一つは、自動インストールとまではいきませんが、JavaScript、VBScriptを
利用してクライアントPCにCurl RTEがインストールされているか、
どのメジャーバージョンがインストールされているかの判別を行うことが出来ます。
この仕組みを利用して、ver7のアプリを起動する前に、そのスクリプトで
必要なバージョンのCurl RTEがインストールされているか確認して、
インストールされていない場合は、任意のダウンロードページに遷移させる、
インストールされている場合はそのまま、Curlアプリを起動させるということが
出来るかと思います。
このスクリプトのサンプルが以下に御座います。御参照下さい。
http://www.curlap.com/support/technical/qa.php?category=10#q167

また、Administrator権限なしでインストールというのはOSのセキュリティ上の
制約となりますので、Curl RTE側から回避するということは不可能で御座います。

request-browser-resident-httpプロシージャのメリットについて

【ご質問】
IEの使用を前提とした場合、CurlとIE間でのcookie共有が可能とありますが、
IE使用時において、request-browser-resident-httpプロシージャを使用する
メリットにはどのようなものがありますでしょうか。

【回答】
request-browser-resident-httpプロシージャを使用することで、
Curlが表示されているIEと同じCookie・認証情報を使用することが可能となります。

詳細は、Curl開発者ガイドの
[外部リソースとの対話]-[Webサイトとの対話]-[ブラウザ常駐 HTTP]
の項をご参照ください。 

Cookieの共有について

【ご質問】
開発者ガイド内のブラウザ常駐 HTTPの項にて、
「インターネット・エクスプローラ以外のブラウザで実行されているアプレットは、
パッケージのインポートやファイルやイメージのインクルードのような
アプレットが実行する全てのHTTPトランザクションのヘッダ内に
Webサイトが格納して送るcookieにだけアクセスすることが出来ます。」
とありますが、上記説明が指しているCookie情報とは具体的にどのような情報でしょうか。

【回答】
IE以外のブラウザで表示されているCurlアプレットは、
Curl独自のCookie(セッションCookie、有効期限付きCookie)のみアクセスすることができます。
表示しているブラウザが保持しているCookieにCurlアプレットからアクセスすることはできません

HttpCookieのsecure?オプションについて

◆ご質問◆
 通常のWebアプリケーションにおいては、通信プロトコルの指定やsecure属性の付与は
 APサーバ側の設定で行い、アプリ側ではあまり意識するのもではないかと思いますが、
 CurlではCookieの取得・設定・クリアにおいて通信がセキュアであるか否かによって
 メソッドを使い分けるようになっているかと思います。

 通常のWebアプリケーションと同様に、アプリケーション(アプレット)側で通信プロトコルを
 意識しない実装を行う方法はありますでしょうか。

◆回答◆
標準のAPIでは、アプレット側で通信プロトコルを意識しない実装方法はありません。

しかし、アプレット側で意識しないような実装を行うには、
HttpCookieオブジェクト生成する処理をラップしたプロシージャ等を作成し、
その中で通信プロトコルに応じて動的にsecure?を変更することで可能となります

デバッグ可能なAPIバージョンについて

◆ご質問◆
デバッグ可能なAPIバージョンについて教えてください。

バージョン4,6のIDE,RTEがインストールされていましたが、バージョン4のRTEをアンインストールしました。
その後バージョン4のRTEをインストールしたのですが、
バージョン4のデバッグが出来ません。(ブレイクポイントが効きません。)
コントロールパネルの”Curlについて”タブの
デバッグ可能なAPIバージョンにも6.0しかありません。
以前は4.0もありました。
・デバッグ可能なAPIバージョンに再び4.0も入れようとするには、
バージョン6をアンインストールして
バージョン4のIDEからインストールし直さないといけないのでしょうか?
・それとも、他に簡単な方法はあるのでしょうか?
・RTEをアンインストールすると同バージョンのIDEも消されるのでしょうか?

◆回答◆
デバッグを行うためにはそのAPIバージョンに対応したCurl IDEがインストール
されている事が必要になります。
Curl RTE 4.0をアンインストールするとCurl IDE 4.0も同時にアンインストール
されてしまいますので、これが原因でデバッグ不可能になってしまったと
考えられます。

再度4.0のAPIバージョンでデバッグできるようにするためには
Curl IDE 4.0を再インストールする必要があります。
※Curl RTE 4.0をインストールしてもCurl IDE 4.0がインストールされていなければ
4.0のAPIバージョンのデバッグはできません。

NumberFormatterクラスのロケール

【ご質問】
NumberFormatterクラスのcreate-currency-formatterコンストラクタでキーワード引数”locale”で、”ja-JP”を指定した場合、通貨記号として円マークが使用されますが、このコンストラクタを使用せずに直接文字列として結合した”¥”と異なるフォント及びサイズの円マークが使用されるようです。このフォント指定はどこかで設定できるものなのでしょうか?
 
【回答】
こちらはOSの設定に影響を受けます。
具体的には、Windowsのコントロールパネルより地域と言語のオプションにある通貨の設定の円マークを表示します。
こちらの円マークが”¥”と違いますので、Curlを使用した際も違った表示になります。

同じアプレットを、異なるバージョンのWindowsで表示させると微妙に表示が異なります

【ご質問】
同じアプレットを、異なるバージョンのWindowsで表示させると微妙に表示が異なります。
 
【回答】
同じフォントでもWindowsによって描画APIが異なる場合は、CurlもWindowsに依存する為、画面表示が異なります。
アプレットを作成する場合には、このような微妙な差異を考慮に入れたレイアウトを作成して下さい。

2006年4月度の「InternetExplorer用の累積的なセキュリティ更新プログラム」

【ご質問】
2006年4月度の「InternetExplorer用の累積的なセキュリティ更新プログラム」には、InternetExplorer上におけるActiveXコントロールの仕様が一部変更になる修正が含まれておりますが、Curlを使用する上でどの様な影響があるのでしょうか。 
 
【回答】

ActiveXの読み込み部分にEMBED、OBJECT、APPLET要素が使用されるWebページ、つまりCurlにつきましては、Embedを使用しHTMLからCurlのアプレットを呼び出す場合のみ影響があります。
「このコントロールをアクティブ化して使用するにはクリックして下さい。」との表示がされ、ユーザーのアクションにクリックが一回追加されるようになります。
Microsoft社のサイトにも掲載されておりますが、ユーザー入力にすぐに応答する非アクティブなコントロールを読み込むWeb ページを作成するには、Microsoft JScriptを使用して、外部スクリプトファイルからコントロールを読込むようにして下さい。

Microsoft社からの情報は以下のページを参照して下さい。
http://www.microsoft.com/windows/ie_intl/ja/using/techinfo/activexupdate.mspx

http://www.microsoft.com/japan/msdn/workshop/author/dhtml/overview/
activating_activex.aspx

 

サンプルは

こちらをご覧ください。
http://www.curlap.com/guide/activex.txt

デプロイメント・ライセンスキーはどこに配置すればよいのでしょうか

【ご質問】
デプロイメント・ライセンスキーはどこに配置すればよいのでしょうか?
 
【回答】    
例えば、ホスト名 http://www.my-server.net のサイトの
http://www.my-server.net/contents/demos/some-Curl-app/start.curl
にバージョン5.0のアプリケーションがあるとします。
この場合、状況に応じて次のどちらかに置いて下さい。
どちらにもライセンスキーが見つからない場合はエラーとなります。

①Web ルートのライセンスキーの場合
http://www.my-server.net/ で申請)
http://www.my-server.net/curl-license-5.dat
②アプレット専用のライセンスキーの場合
http://www.my-server.net/contents/demos/some-Curl-app/ で申請)
http://www.my-server.net/contents/demos/some-Curl-app/curl-license-5.dat

詳細は、Curl開発者ガイドの
[Web サーバーの構成]-[ライセンス キー]-[ライセンス キーの配置ロケーション]
の項をご参照ください。 

メッセージ等、内部的にベースとなる文字コードについて教えて下さい

【ご質問】
メッセージ等、内部的にベースとなる文字コードについて教えて下さい。 

【回答】    
内部処理はUnicodeを使用しています。
アプリケーションのソースコードの文字コード、通信する時の文字コードなどは別途指定可能です。

ソースファイルを保存する時に使う文字コードは、ソースコードのヘラルド部分にて次のような構文で指定できます。
{curl-file-attributes character-encoding = “shift-jis”}

サーバと通信する時の通信データの文字コードは任意の文字コードを別途指定出来ます。
詳細は、Curl開発者ガイドの
[外部リソースとの対話]-[ファイルやその他のリソースへのアクセス]
   -[テキスト ファイルの読み取りと書き込み]-[文字エンコーディング]
の項をご参照ください。

CurlのWebサーバやサーバOSとの相性について教えて下さい

【ご質問】
CurlのWebサーバやサーバOSとの相性について教えて下さい。
 
【回答】    
Curlはクライアントサイドの技術であり、サーバ側のシステムに依存しないのが特徴です。基本的に、サーバとHTTP、HTTPS、Webサービスなど標準的なプロトコルで通信を行い、XMLなどのデータを送受信するだけです。

特権ロケーションについて教えて下さい

【ご質問】
特権ロケーションについて教えて下さい。
 
【回答】    
セキュリティ制限を越えて動作する必要があるアプレットのロケーション(場所)のことです。

実行時に特権ロケーションリストに含まれているロケーションからアプレットがロードされた場合、
このアプレットに特権が与えられます。
バージョン4.0以降では、Curlコントロールパネルの特権ロケーションの設定タブに証明書リストが追加されました。
この証明書リストに登録した証明書によって署名されたアプレットであれば、特権付きアプレットで実行されます。

詳細は、Curl開発者ガイドの
[コンテンツの構成要素]-[セキュリティ]
の項をご参照ください。

Curlのセキュリティについて教えて下さい

【ご質問】
Curlのセキュリティについて教えて下さい。 

【回答】    
Curlは、サンドボックスモデルで動作します。これにより悪意のある非特権アプレットが
ユーザーのシステムに害を与えたり、個人情報を取得、送信することを防ぎます。
サーバと通信する時に、暗号化通信HTTPSがご利用できます。

詳細は、Curl開発者ガイドの
[コンテンツの構成要素]-[セキュリティ]
の項をご参照ください。 

バージョン4.0以降では、セキュリティが強化されています。
暗号化APIが用意され、クライアントマシンにデータを保存する時に
CurlのAPIを利用して暗号化してから保存することが可能になります。
また、署名付きアプレット機能も標準整備されています。
Curlの開発環境4.0以上を利用すれば手軽に署名付きアプレットが作成出来ます。

セッションタイム アウトが発生

【ご質問】
Curlのアプレットの中にIEのActiveXオブジェクトを利用してHTMLページを閲覧し、
そのActiveXオブジェクトを閉じた際、セッションタイム アウトが発生してしまうのですが、何故でしょうか。 

【回答】   
Internet Explorerのバグによって発生した可能性があります。
ご利用のOS・IEのバージョンが次のMicrosoft社のバグ情報と一致するかどうかを確認してください。

http://support.microsoft.com/?scid=kb%3Bja%3B311072&x=9&y=9
http://support.microsoft.com/kb/311072

回避策はアプレットを実行している間に、そのActiveXオブジェクトを閉じないようにすることです。