web-dev-qa-db-ja.com

独自のURLプロトコルを作成するにはどうすればよいですか? (例:so:// ...)

私は見た:

  • http://www...
  • ftp://blah.blah...
  • file://blah.blah...
  • unreal://blah.blah...
  • mailto://blah.blah...

httpなどが呼び出される最初のセクションは何ですか?

自分で登録できますか?

199
Michael Beck

HTTP://FTP://などの部分は、 RIスキーム と呼ばれます

レジストリから独自に登録できます。

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    Shell/
      open/
        command/
          (Default) PathToExecutable

ソース: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtmlhttp://msdn.Microsoft.com/en-us/library /aa767914(v=vs.85).aspx

191
James Gregory

メモ帳を開き、以下のコードを貼り付けます。 「YourApp」をアプリの名前に変更します。それをYourApp.regに保存し、エクスプローラーでクリックして実行します。それでおしまい!乾杯!アーウィン・ハンチェス

REGEDIT4

[HKEY_CLASSES_ROOT\YourApp]
@="URL:YourApp Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\YourApp\DefaultIcon]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\""

[HKEY_CLASSES_ROOT\YourApp\Shell]

[HKEY_CLASSES_ROOT\YourApp\Shell\open]

[HKEY_CLASSES_ROOT\YourApp\Shell\open\command]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""
55
Codebeat

これはブラウザごとに異なり、IEおよびウィンドウでは、プラグ可能なプロトコルハンドラと呼ばれるものを作成する必要があります。

基本的な手順は次のとおりです。

  1. IInternetProtocolインターフェイスを実装します。
  2. IInternetProtocolRootインターフェイスを実装します。
  3. IClassFactoryインターフェイスを実装します。
  4. オプション。 IInternetProtocolInfoインターフェイスを実装します。 HTTPプロトコルのサポートは、トランザクションハンドラーによって提供されます。
  5. IInternetProtocolInfoが実装されている場合は、URLセキュリティゾーンマネージャーがセキュリティを適切に処理できるように、PARSE_SECURITY_URLおよびPARSE_SECURITY_DOMAINのサポートを提供します。プロトコルハンドラーのコードを記述します。
  6. BINDF_NO_UIおよびBINDF_SILENTOPERATIONのサポートを提供します。
  7. HKEY_CLASSES_ROOT\PROTOCOLS\Handlerの下のレジストリにプロトコルハンドラーのサブキーを追加します。
  8. サブキーの下に文字列値CLSIDを作成し、文字列をプロトコルハンドラのCLSIDに設定します。

Windows側の詳細については、 MSDNの非同期プラグ可能プロトコルについて を参照してください。 Windows SDKにもサンプルがあります。

クイックグーグルは、コードプロジェクトに関するこの記事を示しました: http://www.codeproject.com/KB/IP/DataProtocol.aspx

最後に、セキュリティ担当者として、このコードを強化する必要があることを指摘する必要があります。確実に実行するには、マネージコードでは実行できず、C++で実行する必要があるため、リスクが高くなります(VB6を使用できると思います)。本当にこれを行う必要があるかどうかを検討し、必要な場合は慎重に設計し、安全にコーディングする必要があります。攻撃者は、ページにリンクを含めるだけで、渡されるコンテンツを簡単に制御できます。たとえば、単純なバッファオーバーフローがある場合、誰もこれを行うのが良いでしょう:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

VC8以上のコンパイラに含まれるstrsafeおよび新しいセキュアなCRTメソッドの使用を強く検討してください。 http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx を参照してください。私が何を話しているのかわからない場合。

38
Peter Oehlert

登録済みの RIスキーム のリストを次に示します。それぞれにRFCがあります-それを定義するドキュメントであり、ほぼ標準です。 RFCは、新しいアプリケーション(ブラウザ、ftpクライアントなど)の開発者に、サポートする必要があるものを伝えます。新しいベースレベルのプロトコルが必要な場合は、未登録のプロトコルを使用できます。他の回答では、その方法を説明しています。既存のプロトコルで多くのことを実行できるため、既存の実装を取得できることに留意してください。

18
Yuval F

ほとんどのMicrosoft製品(Internet Explorer、Office、「ファイルを開く」ダイアログなど)では、適切なプレフィックスを持つURIが開かれたときに実行される アプリケーションの登録 を実行できます。これは、より一般的な 説明 -独自のプロトコルの実装方法の一部です。

Mozillaの場合、説明は here 、Java- here です。

4
Dmitry Khalatov

プロトコルと呼ばれます。独自のプロトコルを作成できないのは、次のことだけです。

  1. URL形式と実際のデータ形式の両方で、そのプロトコルを理解するある種のブラウザまたはユーザーエージェントを記述します。
  2. そのプロトコルを理解するサーバーを書く
  3. ブラウザとサーバーが引き続き連携して動作できるように、プロトコルの仕様を用意してください。

Windowsを使用すると、#1が非常に簡単になります。多くの場合、実際に必要なのはこれだけです。 Viz:

RLプロトコルへのアプリケーションの登録

2
JSBձոգչ

最初のセクションはプロトコルと呼ばれ、はい、独自に登録できます。 Windows(C#タグを指定してこれを実行していると想定している-Monoファンの皆さん)、これは完了です レジストリ経由

1
GaryF

プロトコル?

私はこれを見つけました、それはコンピュータのローカル設定のようです...

http://kb.mozillazine.org/Register_protocol

0
Hugoware