【问题标题】:Is it possible for a desktop application to get the website URL?桌面应用程序是否可以获取网站 URL?
【发布时间】:2011-11-26 22:24:47
【问题描述】:

我正在开发一个桌面应用程序,一旦用户打开银行网站,它必须通知用户是否禁用了防病毒或其他安全软件。银行网站网址 以应用而闻名。如果要从用户访问给定的银行站点,我的应用程序必须触发通知窗口。我希望应用程序检查用户正在打开哪个站点(链接),如果它是预定义的链接,则应显示通知表单.是否可以在不开发浏览器插件的情况下完成类似的操作?

【问题讨论】:

标签: .net web desktop-application


【解决方案1】:

简短的回答是不。

更长的答案是肯定的。但是您必须进行网络嗅探(不起作用 - 银行流量通常是加密的)或内存内容(手动从 RAM 中读取字符串等)。在这两种情况下,制作浏览器插件至少要容易 1000 倍。

【讨论】:

  • 我无法想象两个答案如何同时存在,我的意思是是/否。真正的只有一个!
  • 如果你是一个非常优秀的程序员,是的。否则,没有。从他/她不得不问我会选择否的事实来看。
  • 这并不意味着一个非常优秀的程序员应该什么都知道
  • 如果一个足够优秀的程序员能够使用原始加密 SSL 流并从内存中读取密钥,那么他/她自己就会想出这个想法。 (来源:经验)
  • 是的,我想出了这个主意,但我需要一些关于最佳解决方案的意见
【解决方案2】:

假设,如果您的应用程序充当用户浏览器的 HTTP 代理,那么是的..您可以拦截对银行网站的请求并向用户响应您的建议..

【讨论】:

  • 向桌面应用程序添加 HTTP 代理功能是否需要太多工作?
【解决方案3】:

可以通过开发浏览器插件和/或 http(s)-代理和/或对浏览器进行沙盒处理和/或将浏览器替换为修改版本和/或破解浏览器...

如果您真的只想使用普通的桌面应用程序执行此操作(轮询浏览器以获取当前打开的 URL),但我强烈建议您不要执行此操作...它无法可靠地工作,并且会放一些资源紧张...

如果我必须实现这一点,我肯定会编写一个浏览器插件和/或 http(s) 代理...有什么理由为此排除浏览器插件?

【讨论】:

  • 轮询浏览器是指开发一个轮询浏览器的插件吗?
  • @Tady no - 我的意思是一个桌面应用程序,它轮询(= 定期询问)浏览器(例如通过 COM 的 IE)。
  • @Tady 顺便说一句,您可以构建代理并将其托管在桌面应用程序或 Windows 服务中...使用代理的要点是必须将浏览器/操作系统配置为使用它...
  • 我宁愿不使用加载项,因为很多用户都受到加载项的干扰
  • @Tady 我认为用户更容易被桌面应用程序作为代理或轮询浏览器而更糟......如果它是代理,那么让用户知道,如果它是插件然后让用户知道它做了什么等等 - 如果有人不想要这些,那么你应该做的不多!
【解决方案4】:

这是不可能的。 (至少无需在每台计算机上进行大量工作和/或手动配置)

你有很多问题要解决:

  1. 你将如何从“浏览器”获取“url”?
  2. 安全呢?
  3. 您应该如何确定是否启用了防病毒或防火墙?

让我们将“url”分成更小的部分(让我们限制在 http 协议中):

HTTP 是两个 IP 地址和两个端口之间的 TCP/IP 连接,服务器通常在端口 80 上响应(如果省略端口,则默认为 80)。示例网址:

http://123.123.123.123:456(通过 http 连接到 ip 123.123.123.123 的 456 端口)

然后我们有 dns;一个域名将被翻译成一个IP地址,例如:

http://foobar.com => http://123.123.123.123(dns 将 foobar.com 翻译成 123.123.123.123)

现在,假设您添加一个路径到您的 url,例如:

http://foobar.com/path/to/page.htm

我们现在做什么? TCP/IP 中没有“路径”之类的东西。它在 HTTP 级别。让我们看一下一个非常基本的 http-url,它被转换为 TCP/IP 连接:

http://foobar.com/path/to/page.htm =>

  1. 客户端查找 foobar.com => 123.123.123.123
  2. 客户端连接到 123.123.123.123 的 80 端口
  3. 客户端向服务器发送以下数据:
GET /path/to/page.htm HTTP/1.1 主持人:foobar.com

您将如何获得 tcp/ip 连接(及其“内容”)?

你有几个选择:

  • 过滤器(安装到网络层。敏感的东西,我尝试过的所有东西都会导致不稳定和性能损失,除了麻烦 - 防火墙..)
  • 代理(您必须确保每个浏览器都通过您的代理重定向其网络流量 - 没有全局设置,每个浏览器都有自己的方式)
  • 某种浏览器插件(您必须为每个浏览器编写一个新插件,并确保它已启用)

让我们看一下安全性——如果使用 HTTPS(带有 SSL 的 HTTP),那么就会引入另一个问题:每个网络连接的内容都是加密的,除非你有密钥(而且你没有' t,除非你提供你自己的,但是浏览器不会信任你的密钥并发出一个很大的警告,除非你已经在浏览器中安装了你的密钥。而且你不想这样做 - 这是一个相当大的安全性风险..)

假设您已经解决了这个问题,您如何知道是否安装并启用了防病毒软件?还有防火墙?每个防病毒和防火墙都有自己的方式。

【讨论】:

  • 关于杀毒软件可以使用WMI来完成。这并不难。
  • 我不需要从 url 或链接进行翻译,因为我知道链接是预定义的 www.mybank.com 并且此链接在我的应用程序中是一个常量,但无论如何感谢您的长时间回复跨度>
  • 你知道你应该寻找哪些IP地址吗? (一个 dns 查询可能会给你一个 ip,下一个可能会给你另一个 ..)而且仅仅查询 WMI 并不容易 - 我不会指望每个防病毒和防火墙软件都会为此烦恼
  • 我已经完成了有关防病毒的部分。有些人只使用 WMI 的一个命名空间以及为什么会出现问题。
【解决方案5】:

如果您的 .Net 桌面应用程序用于在用户访问您预定义的银行网站时显示通知。然后考虑到替代答案所需的努力,从经验(金融领域)来看,让您的应用程序启动链接并没有多大意义。然后您可以进行检查,显示通知,如果您使用从桌面应用程序生成的唯一查询字符串参数启动网站,浏览该网站的用户将获得额外的安全保护。

如果用户没有安装您的应用程序,那么首先进行所有这些检查(在用户打开银行网站后是否禁用防病毒或其他安全软件时通知用户)是否会失去意义。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多