如何创建自己的URL协议?(例如:// ...)

Mic*_*eck 202 windows protocols protocol-handler

我见过:

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

您看到的第一部分是什么http叫什么?

我可以自己注册吗?

Jam*_*ory 193

与该部分HTTP://,FTP://等被称为URI方案

您可以通过注册表注册自己的.

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable
Run Code Online (Sandbox Code Playgroud)

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

  • 那些非Windows操作系统呢? (17认同)
  • "那么非Windows操作系统呢?" 它是特定于应用程序的.我认为它实际上经常在Windows上特定于应用程序(这不会使一切神奇地工作). (9认同)
  • `(默认)`这里的意思是空字符串.不要从字面上理解. (8认同)
  • 可插拔协议处理程序绝对是更好的选择. (4认同)
  • 定义一切.注册表项告诉Windows将带有该协议的Uri传递给指定的应用程序,其他所有内容都应由应用程序本身处理. (2认同)
  • @ user34660 您混淆了“方案”和“处理程序”。有一个`mailto:` URI 方案的规范,但这与注册`mailto:` 方案的URI 处理程序无关。操作系统根本不在乎,它是处理所有这些的方案的程序。Windows 以完全相同的方式处理所有 URI,至少就我所知,它将 URI 作为参数传递给指定的处理程序。 (2认同)

Cod*_*eat 55

打开记事本并将下面的代码粘贴到其中.将"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\""
Run Code Online (Sandbox Code Playgroud)

  • 只有 %1 重要,无法在 url %2 和 %3 等中指定 (6认同)
  • reg文件中的%1%2等是您的应用程序的参数.所以如果你做YourApp.exe"你的论点"所以%1 =="你的论点" (3认同)
  • 如何从资源管理器调用,什么是网址 (2认同)

Pet*_*ert 38

这对于每个浏览器都是不同的,在IE和Windows中,您需要创建他们称之为可插入协议处理程序的浏览器.

基本步骤如下:

  1. 实现IInternetProtocol接口.
  2. 实现IInternetProtocolRoot接口.
  3. 实现IClassFactory接口.
  4. 可选的.实现IInternetProtocolInfo接口.事务处理程序提供对HTTP协议的支持.
  5. 如果实现了IInternetProtocolInfo,请提供对PARSE_SECURITY_URL和PARSE_SECURITY_DOMAIN的支持,以便URL安全区域管理器可以正确处理安全性.编写协议处理程序的代码.
  6. 提供对BINDF_NO_UI和BINDF_SILENTOPERATION的支持.
  7. 在HKEY_CLASSES_ROOT\PROTOCOLS\Handler下的注册表中为协议处理程序添加一个子项.
  8. 在子项下创建字符串值CLSID,并将字符串设置为协议处理程序的CLSID.

有关Windows端的更多详细信息,请参阅MSDN上的关于异步可插入协议.Windows SDK中还有一个示例.

快速谷歌还在codeproject上展示了这篇文章: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.

  • 这只是吸引用户点击它的一个例子. (5认同)
  • 这是来自.Net 2.0运行时(注意,这包括3.0和3.5)时间范围.它在同一个进程中不支持不同的CLR运行时,所以如果我写了一个1.0处理程序而你编写了一个2.0,并且我们的两个产品都安装在客户计算机上,我们一起确保浏览器每次都崩溃它推出了.4.0运行时试图针对这个问题,但我的回忆是仍然需要关注的边界情况.但是,在4.0之前绝对要避免使用.Net对象来处理原生进程中的插件,并且可能仍然需要担心. (2认同)

Yuv*_*l F 18

这是注册的URI方案的列表.每个人都有一个RFC - 一个定义它的文档,几乎是一个标准.RFC告诉开发人员他们需要支持的新应用程序(例如浏览器,ftp客户端等).如果您需要新的基本级协议,则可以使用未注册的协议.其他答案告诉你如何.请记住,您可以使用现有协议执行大量操作,从而获得现有的实现.

  • 尽管有关如何在Windows中使协议工作的技术细节 - 这是最重要的答案.除非已向IETF注册,或使用实验命名空间(如X-前缀),否则不应创建新的URI方案 (5认同)