security - 加强 HTTP 流量使其不可重现的想法

标签 security http client public-key-encryption

我有一个项目,需要在 HTTP Web 服务器上进行安全交易。我完全控制客户端(移动应用程序)并控制服务器。我想开发一个系统,客户端可以在其中添加或减去存储在服务器数据库中的值。存储的值是基于货币的,因此数字准确很重要。我的问题是如何防止有人复制 HTTP 流量并随意删除或添加值。有人可以从客户端捕获数据包,查看修改为服务器货币值所需的 HTTP POST 参数,并在需要时重现这些数据包。

我的第一个想法是让客户端用公钥加密新货币值,然后让服务器用私钥解密。我还会在加密之前嵌入一个时间戳和他们的用户名以及新的货币值,因此请求总是不同的。然后服务器会检查时间戳,如果超过 10 秒则拒绝。这种方法的一个问题是客户端或服务器是否基于时间不同步。服务器将与 NTP 同步,但不能保证客户端是正确的

任何其他想法将不胜感激。我不是在寻找低层次的实现细节,只是在寻找高层次的概述。理想情况下,该解决方案不会对客户端或服务器造成太大负担,因为交易率会很高。

最佳答案

一般安全提示:如果客户端在野外,您无法控制它!服务器必须检查客户端发送的所有内容。

简单流程:

  • 客户端通过 SSL 使用用户名/密码连接到服务器,设置“ session ”。
  • 客户端发送命令(将产品 X 增加 Y)
  • 服务器通过 SSL 连接接收此请求
  • 服务器检查请求是否有效,登录用户是 允许这样做,执行命令并向 客户表示失败或成功。
  • 客户端断开连接,发送“ session 终止”消息( session 也应在设定的时间段后超时)。

注意: 一切都必须在服务器端进行身份验证和检查!您的客户端应用程序不应该负责确定什么是“有效”请求,什么不是 - 这是服务器的工作。每个请求都应该通过 SSL,并且只应在客户端成功登录并启动 session 后执行。即使使用基于时间戳的检查,有人也可以对您的客户端进行逆向工程或使用中间人攻击,但前提是他们拥有用户名/密码(或能够拦截合法客户端的数据 - 使用 SSL/很难)公钥/私钥系统)。如果非常强的安全性是强制性的,则来自客户端的每个请求都应使用 RSA 加密。

关于security - 加强 HTTP 流量使其不可重现的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9425054/

相关文章:

php - Mysql 和 php 修复以复制 PDO 安全性

javascript - 如何在外部使用 Angular 6 subscribe() 方法的结果?

angularjs http远程api加载失败

php - 强制重复的资源文件请求发出单独的 HTTP 请求?

client - Weblogic不支持EJB3?

security - 将 Meteor.js 中的路由限制为特权用户

Ajax HTTPS 但静态内容托管在 HTTP 上

networking - 当多台计算机具有相同的 IP 地址时,如何以编程方式连接到其中一台?

http - 是否可以在 Go 中将代理/ socks 与 http2 客户端一起使用?

php - 保护 PHP 表单和 MySQL 数据库