【问题标题】:Server/Client Verification?服务器/客户端验证?
【发布时间】:2010-11-20 23:21:10
【问题描述】:

我们正在考虑创建一个程序,该程序将 POST 请求发送到服务器端程序以进行某些处理。我们想考虑某种形式的验证,以确保 POST 请求不是试图淹没我们的系统或其他东西的随机垃圾邮件发送者。我对这些东西不太了解,但我在想客户端可能会发送一个 date-num 和一个“加密”的 date-num(没有安全加密,只是使用一些特殊的算法)。然后,服务器将加密 date-num 并解密客户端加密的 date-num。如果加密的 date-nums 或解密后的 date-nums 不匹配,显然这不是来自我们客户端的请求,因此服务器不会对请求进行处理。

正如我所说,我对此知之甚少。我会以正确的方式去做吗?有没有更好的办法?如果这是一个好的方法,我可以去哪里寻找“加密”算法? (我发现的大多数算法都是用于安全加密的,只能在同一台机器上解密。我不太关心安全性——我只是在寻找验证)。

非常感谢您的帮助。

PS 我不确定这是否是重复的,因为我真的不知道要搜索什么。我找不到关于此的任何其他问题,但这并不意味着什么。

编辑: 为了澄清,服务器代码应该尽可能“插入”——例如如果它可以使用直接的 PHP 或 ASP.NET 而不是乱搞服务器配置来完成,那会更好。在客户端也一样。请记住,这不一定是安全的,我们只是试图阻止垃圾邮件发送者发布一百万次随机数据。

【问题讨论】:

    标签: c# php client verification


    【解决方案1】:

    您可以使用 ssl 和客户端证书并让网络服务器透明地处理它。这样,服务器和客户端都可以(或多或少)确定他们正在与谁交谈。
    您的网络服务器将是什么? IIS、Apache、...?
    如果是 apache,请查看 httpd 2.2 docs, Client Authentication and Access Control
    如果是 IIS,请参阅 Enabling Client Certificates in IIS 6.0 (IIS 6.0)

    【讨论】:

    • 我们是否需要付费才能获得“已验证”证书?还是可以使用“未经验证”的证书?还是我完全误解了?
    • 它适用于自签名 CA。但是客户端也必须信任服务器证书。如果您的客户端是“普通”浏览器,则用户必须(至少)添加一次您的证书。 如果自签名证书是否可行取决于您的“客户” - 应用程序以及人类:-)
    【解决方案2】:

    尝试使用cryptographic nonce

    1. 在启动 POST 的页面上,会生成一个随机数并存储在数据库中,其中包含请求的 IP 地址和到期时间(15-30 分钟?)。
    2. 相同的随机数存储为 POST 变量。
    3. 在 POST 上,为了进行处理,必须在到期时间之前成功查找匹配 nonce 和 IP 地址。

    结合honeypot captcha,它应该可以很好地防止机器人对您的系统造成压力。

    【讨论】:

    • 这听起来像是一个绝妙的策略;但是,我们正在考虑直接执行 POST 请求,而不是“启动”页面(因为它都将在该程序的幕后处理)。但是蜜罐验证码肯定会有所帮助。
    【解决方案3】:

    解决此类问题的常用方法是包含HMAC。它允许使用密钥进行完整性检查和发件人身份验证。

    【讨论】:

    • 嗯,这看起来很有希望。我会调查的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2020-09-08
    • 1970-01-01
    • 2017-01-26
    • 2010-09-14
    • 2016-10-16
    相关资源
    最近更新 更多