Bagaimana cara membuat protokol URL saya sendiri? (mis. jadi: // ...) [ditutup]

212

Saya sudah melihat:

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

Apa itu bagian pertama di mana Anda melihat httpdan sejenisnya disebut?

Bisakah saya mendaftarkan sendiri?

Michael Beck
sumber
5
Tidak yakin apakah ini membutuhkan tag c # dan .net, ini lebih luas dari itu.
Rob Hruska
Itu adil. Saya hanya menandai itu karena kami berencana menggunakan C # untuk mengimplementasikan sesuatu seperti ini. Terimakasih Meskipun. :-)
Michael Beck
14
Nama yang benar adalah "skema" (lihat RFC 2616 dan 2396). Bahkan jika banyak skema URL dinamai dengan protokol, ini tidak menyiratkan bahwa satu-satunya cara untuk mengakses sumber daya adalah melalui protokol
Marek
Ada dua jenis protokol tetapi saya tidak tahu istilah apa yang digunakan untuk membedakannya. Protokol "file" dan "mailto" diproses di klien. Protokol "http" dan "ftp" diproses di server. Pada awalnya saya bingung dengan jawaban untuk protokol yang diproses di browser ketika saya menginginkan sesuatu yang diproses di server.
user34660

Jawaban:

203

Bagian dengan HTTP://, FTP://, dll disebut URI Skema

Anda dapat mendaftarkan sendiri melalui registri.

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

Sumber: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml , http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

James Gregory
sumber
19
Bagaimana dengan OS non-Windows?
Bdoserror
9
"Bagaimana dengan OS non-Windows?" Ini khusus aplikasi. Saya pikir itu sebenarnya sering khusus aplikasi pada Windows juga (ini tidak akan membuat semuanya berfungsi secara ajaib).
Calum
2
Tentukan segalanya. Entri registri memberitahu Windows untuk lulus Uri dengan protokol itu ke aplikasi yang ditentukan, semua yang lain harus ditangani oleh aplikasi itu sendiri.
James Gregory
5
Handler protokol Pluggable jelas merupakan pilihan yang lebih baik.
8
(Default)di sini berarti string kosong. Jangan menerimanya secara harfiah.
deerchao
56

Buka notepad dan rekatkan kode di bawah ini ke dalamnya. Ubah "YourApp" menjadi nama aplikasi Anda. Simpan ke YourApp.reg dan jalankan dengan mengkliknya di explorer. Itu dia! Bersulang! Erwin Haantjes

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\""
Codebeat
sumber
2
bagaimana menelepon dari penjelajah, apa url
imp
@imp, bukan ide cerdas untuk memanggil file .reg dari (internet) explorer. Anda dapat menggunakan perintah mulai untuk mengeksekusi file reg, seperti 'start yourregfile.reg' tetapi Anda akan mendapatkan pesan prompt dari os untuk memastikan untuk menambahkannya ke registri. Untuk dapat melakukan ini, pengguna harus memiliki hak admin.
Codebeat
Sebenarnya saya bertanya tentang pertanyaan ini stackoverflow.com/questions/24265292/… .
imp
3
% 1% 2 dll dalam file reg adalah argumen untuk aplikasi Anda. Jadi jika Anda melakukan YourApp.exe "argumen Anda" maka% 1 == "argumen Anda"
Codebeat
1
hanya% 1 yang penting, tidak ada cara untuk menentukan di url% 2 dan% 3 dll
Trident D'Gao
39

Ini berbeda untuk setiap browser, di IE dan windows Anda perlu membuat apa yang mereka sebut pengendali protokol pluggable.

Langkah-langkah dasarnya adalah sebagai berikut:

  1. Menerapkan antarmuka IInternetProtocol.
  2. Menerapkan antarmuka IInternetProtocolRoot.
  3. Menerapkan antarmuka IClassFactory.
  4. Pilihan. Menerapkan antarmuka IInternetProtocolInfo. Dukungan untuk protokol HTTP disediakan oleh penangan transaksi.
  5. Jika IInternetProtocolInfo diimplementasikan, berikan dukungan untuk PARSE_SECURITY_URL dan PARSE_SECURITY_DOMAIN sehingga pengelola zona keamanan URL dapat menangani keamanan dengan benar. Tulis kode untuk penangan protokol Anda.
  6. Berikan dukungan untuk BINDF_NO_UI dan BINDF_SILENTOPERATION.
  7. Tambahkan subkunci untuk pengendali protokol Anda dalam registri di bawah HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Buat nilai string, CLSID, di bawah subkunci dan setel string ke CLSID dari pengendali protokol Anda.

Lihat Tentang Asynchronous Pluggable Protocols di MSDN untuk detail lebih lanjut di sisi windows. Ada juga sampel di SDK windows.

Google cepat juga menunjukkan artikel ini pada codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Akhirnya, sebagai petugas keamanan saya harus menunjukkan bahwa kode ini harus diperketat. Ini berisiko tinggi karena untuk melakukannya dengan andal Anda tidak dapat melakukannya dalam kode yang dikelola dan harus melakukannya dalam C ++ (saya kira Anda bisa menggunakan VB6). Anda harus mempertimbangkan apakah Anda benar-benar perlu melakukan ini dan jika Anda melakukannya, rancang dengan hati-hati dan berikan kode dengan aman. Seorang penyerang dapat dengan mudah mengontrol konten yang diteruskan kepada Anda dengan hanya menyertakan tautan pada halaman. Misalnya jika Anda memiliki buffer overflow sederhana maka tidak ada yang lebih baik melakukan ini:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Sangat mempertimbangkan menggunakan strsafe dan metode CRT aman baru termasuk dalam VC8 dan kompiler di atas. Lihat http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx jika Anda tidak tahu apa yang saya bicarakan.

Peter Oehlert
sumber
6
Itu hanya contoh dari sesuatu yang menarik perhatian pengguna untuk mengkliknya.
Peter Oehlert
tolong jelaskan ini: «karena untuk melakukannya dengan andal Anda tidak dapat melakukannya dalam kode terkelola dan harus melakukannya dalam C ++»
LogicDaemon
2
Ini dari runtime .Net 2.0 (perhatikan, ini termasuk jangka waktu 3.0 dan 3.5). Itu tidak mendukung runtime CLR berbeda dalam proses yang sama, jadi jika saya menulis penangan 1.0 dan Anda menulis 2,0, dan kedua produk kami dipasang pada komputer pelanggan, bersama-sama kami akan memastikan bahwa browser mogok setiap kali diluncurkan. Runtime 4.0 mencoba untuk menargetkan masalah ini tetapi ingatan saya masih ada kasus batas yang harus dikhawatirkan. Tapi intinya menggunakan. Net objek untuk plugin dalam proses asli harus benar-benar dihindari sebelum 4.0 dan mungkin masih memiliki kasus sudut yang perlu dikhawatirkan.
Peter Oehlert
19

Berikut daftar skema URI yang terdaftar . Masing-masing memiliki RFC - dokumen yang mendefinisikannya, yang hampir merupakan standar. RFC memberi tahu pengembang aplikasi baru (seperti browser, klien ftp, dll.) Apa yang mereka butuhkan untuk mendukung. Jika Anda memerlukan protokol tingkat dasar yang baru, Anda dapat menggunakan yang tidak terdaftar. Jawaban lain memberi tahu Anda caranya. Harap diingat bahwa Anda dapat melakukan banyak hal dengan protokol yang ada, sehingga mendapatkan implementasi yang ada.

Yuval F
sumber
6
Sekalipun detail teknis tentang cara membuat protokol berfungsi di Windows - ini adalah jawaban yang paling penting. Anda seharusnya tidak membuat skema URI baru kecuali terdaftar di IETF, atau menggunakan namespace eksperimental (seperti awalan X-)
Alnitak
4

Untuk sebagian besar produk Microsoft (Internet Explorer, Office, dialog "buka file", dll.) Anda dapat mendaftarkan aplikasi yang akan dijalankan ketika URI dengan awalan yang sesuai dibuka. Ini adalah bagian dari penjelasan yang lebih umum - bagaimana menerapkan protokol Anda sendiri.

Untuk Mozilla, penjelasannya ada di sini , Jawa - sini .

Dmitry Khalatov
sumber
2

Ini disebut protokol. Satu-satunya hal yang mencegah Anda membuat protokol sendiri adalah Anda harus:

  1. Tuliskan peramban atau agen pengguna dari beberapa jenis yang memahami protokol itu, baik dalam bentuk URL-nya maupun dalam format data aktual
  2. Tulis server yang mengerti protokol itu
  3. Lebih disukai, memiliki spesifikasi untuk protokol sehingga browser dan server dapat terus bekerja sama.

Windows membuat # 1 sangat mudah, dan dalam banyak kasus inilah yang sebenarnya Anda butuhkan. Yaitu:

Mendaftarkan Aplikasi ke Protokol URL

JSB ձոգչ
sumber
1

Bagian pertama disebut protokol dan ya Anda bisa mendaftarkannya sendiri. Di Windows (di mana saya mengasumsikan Anda melakukan ini karena diberi tag C # - maaf penggemar Mono), ini dilakukan melalui registri .

GaryF
sumber
-10

Anda tidak benar-benar harus mendaftar. Saya telah melihat banyak program, seperti emule, membuat protokol spesifik mereka sendiri (saya pikir itu namanya). Setelah itu, Anda pada dasarnya hanya perlu menetapkan beberapa nilai dalam registri untuk program apa yang menangani protokol itu. Saya tidak yakin apakah ada registry resmi dari specifier protokol. Tidak banyak yang bisa menghentikan Anda membuat specifier protokol Anda sendiri untuk aplikasi Anda sendiri jika Anda ingin orang membuka aplikasi Anda dari browser mereka.

Kibbee
sumber
4
-1: salah arah, menggunakan nomenklatur yang tidak akurat dan tidak memberikan nilai nyata
Marek