【问题标题】:Send sensitive data from my website to my C# application将敏感数据从我的网站发送到我的 C# 应用程序
【发布时间】:2013-03-13 08:03:00
【问题描述】:

我有一个安装了 mysql、php 技术的工厂外部托管网站 (linux platofmr)。我需要我的 C# 应用程序从网站收集数据。

我的网站上有一个 MYSQL 数据库,我想发送我的用户名和密码以访问一些敏感数据(使用 PHP 脚本)

我目前的设计是这样的:

C# 应用程序 POST 到网站上的 login.php 脚本。

例如 mywebsite.com/login.php?username=admin?password=MD5HashedPassword

如果用户名和密码与数据库中的用户名和密码匹配,则脚本会生成一个带有“OK”的空白页面。

现在我认为这对于登录来说可能是安全的,但如果我希望登录脚本生成包含敏感信息的 XML 数据,我不认为这是一种安全的方式。我这样想对吗?

那我应该往哪个方向走。我的应用程序和网站之间是否应该有某种 PHP 会话。这是一件简单的事情吗?我应该放弃使用 PHP 并使用不同的技术吗?

非常欢迎任何意见和建议。

非常感谢

【问题讨论】:

  • 用户名/密码涵盖了身份验证问题。像 SSL 这样的东西会在传输过程中解决数据明文问题(通过使用 HTTPS 而不是 HTTP)。
  • 也许 stackoverflow.com/q/549/1741542OWASP 有帮助。
  • 考虑向您的网站添加 SSL 证书并通过 https 进行调用。这将加密线路上的数据。这是一种可能的简单解决方案。
  • 好的,我认为 HTTPS 可能是答案。我可以获得免费证书(未签名)。但是我该如何设置这一切。有多容易?我需要为此担心会话和代码吗?

标签: c# php security login https


【解决方案1】:

SSL 是保护线路数据的标准方式。如果您有证书,只需将其加载到您的 Web 服务器(服务器之间的过程不同)并确保您的程序将 https 指定为协议。

您的身份验证系统看起来……不标准。如果您要使用程序化 http 请求,通常不能使用平台的表单身份验证。但是,您应该更喜欢基本或摘要式身份验证,而不是自己动手。在这种情况下,凭据将在标头中传递,而不是作为查询字符串的一部分显式传递。由于您使用的是 SSL,因此基本身份验证是安全的。

【讨论】:

    【解决方案2】:

    这应该没问题,前提是您的交易满足以下条件:

    1. 对 PHP 页面的 POST 请求是从 C# 服务器到 PHP 服务器的,用户的浏览器执行 POST。如果用户的浏览器向 PHP 服务器执行 POST,那么攻击者可以简单地使用像 Burp Suite 这样的代理拦截请求并提取哈希密码,然后发出其他恶意请求。

    2. 用户名/密码在查询字符串中作为 POST 参数而不是 GET 参数传递。您使用了以下示例:e.g mywebsite.com/login.php?username=admin?password=MD5HashedPassword,在我看来,它就像使用查询字符串的 GET 请求。这是安全的。

    3. POST 请求仅通过 HTTPS/SSL 而不是常规 HTTP。这将确保通信从 TCP 向下加密。

    【讨论】:

    • 谢谢本。我可以澄清一些事情。我认为网页上普通表单中的 POST 方法与 mywebsite.com/login.php?username=admin?password=MD5HashedPassword 我弄错了吗?所以POST总是使用https?那么这是否意味着服务器生成的页面也将通过面向连接的 SSL 链接?
    • @Prof POST 不一定使用 https,尽管它可以。 POST 请求可以通过 http 或 https/SSL。不同之处在于 POST 请求在请求正文中包含键/值对,而不是 query stringThis page has some good examples of what raw POST requests and responses look like.
    • 再次感谢您。我对 POST 的看法是错误的。因此,我应该使用 HttpWebRequest 或 WebClient 类之类的东西,并且 POST 到包含 https 而不是 http 的 URL。那么响应数据将通过 SSL 连接,因此是安全的?我能问一下,这是大多数桌面应用程序对身份验证所做的吗?以 Valve 的 Steam 服务为例,它是否使用类似的东西,或者他们会使用自己的特殊套接字组件与那里的身份验证服务器接口
    • 在我将此标记为答案之前,我可以做一个最后的澄清。我已经设置了一个自签名 SSL 证书进行测试(使用 opensll 和 apache)。在我的 C# 应用程序中,我使用 HTTPWebRequest 对象向我的 php 脚本的 https:// URL 发出 POST 请求。 PHP 脚本生成我解析的 XML 数据。我可以确认生成的 XML 数据可以安全地抵御中间人攻击吗?我是否真的创建了一个安全的 SSL 连接,因为它看起来有点简单!?
    • @prof 为了验证数据是否加密,我通常使用Wireshark。如果 SSL 工作正常,您甚至不应该看到 HTTP 数据,因为它将在数据包内全部加密。测试 MITM 攻击要困难得多。由于您拥有自签名证书,因此您的用户将很容易受到攻击。为了防止 MITM(这非常重要,所以我很高兴您对此感到担忧),您需要来自受信任的第三方的证书(Verisign 很受欢迎),或者用户需要安装您的根证书受信任。
    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多