1

如果这不符合“问题类型”政策,我深表歉意,尽管我认为这在某种程度上是可以回答的。

我们使用:C#.NET4WebKit.NETMySQL

我们正在开发一个使用 WebKit.NET 作为 UI 的 C#.NET4(一个带有 WebKit 浏览器控件的 WinForm)。所有的 HTML 都是在应用程序中定义的——唯一被外部提取的是远程 MySQL 数据库中的内容。

应用程序中的 C# 现在处理 webkit 浏览器控件中的所有事件。本质上,它会介入某些事件,接受用户输入的值(如果适用)并执行工作。

我认为这是有风险的,因为它不像连接到外部服务器上的 PHP 实例 - 所有“服务器”之类的工作都在客户端计算机上的应用程序中本地发生。如果有人能够破解应用程序(对它进行逆向工程?),整个方法就会被揭示(用户名、密码、表名等)。

在桌面应用程序中,是否有一个类似应用程序的合作伙伴位于服务器上,接受数据,然后代表客户端程序连接到 MySQL 服务器?

也许我是偏执狂,但客户端篮子里的所有鸡蛋都让我害怕。

4

1 回答 1

2

如果你只把验证逻辑放在客户端,很容易绕过它。最明显的例子是仅在客户端使用 javascript 进行验证的网站:禁用 javascript,您可以插入任何您想要的内容。

如果您将任何连接数据库密码硬编码在客户端中,那么任何人都可以访问您的数据库,前提是他们对应用程序进行了逆向工程。数据包嗅探和查看打开的连接也是了解详细信息的好方法。

如果涉及任何类型的用户帐户,我会这样实现:

  1. 用户在客户端登录
  2. 客户端将登录凭据发送到服务器应用程序。客户端可以验证输入,但主要是为了帮助用户和加快流程。对服务器使用 SSL,否则密码将被拦截。验证证书以确保它是您的服务器,并且您会立即摆脱中间人攻击。
  3. 服务器拒绝所有无效输入,执行自己的输入验证,否则执行您希望它执行的数据库操作,返回结果。通过这种方式,您可以控制您的数据库访问。它还可能返回会话身份验证事物,以允许进一步的请求。或者,连接可能只是保持打开状态。我不会让它返回数据库密码以允许直接接口:这可以使用调试工具从正在运行的应用程序中提取。
  4. 客户端接受并解析结果,生活继续。
于 2012-12-10T00:24:38.903 回答