温度传感器和web服务器泛滥



我找不到一个好的答案。

我有一些温度传感器(Arduinos)发送数据到我的web服务器与GET HTTP请求。

在每次请求时,温度与传感器的id和日期一起存储在数据库中。

现在,我是一个坏人,我检测GET请求的结构。我做了一堆GET请求来淹没web服务器(最坏的情况)或记录坏的温度数据(稍微好一点的情况)。

如何预防?

我正在考虑为传感器定义一个唯一的秘密号码,并通过POST请求"验证"它…但是如何做到这一点呢?在请求期间号码如何不被窃取?

有什么建议吗?

也许你可以:

  1. 使用密钥对事务的整个或敏感部分进行散列,因此只有正确的密钥才能在服务器上解码请求。

  2. 限制服务器在一个时间框架内可以接受的请求数量总是好的,从一个传感器,这将保护它免受DOS和洪水。

  3. 跟踪发送IP地址。您将能够区分好IP和坏IP

一些关于arduinos加密的阅读:https://electronics.stackexchange.com/questions/355/encryption-libraruy-for-arduino

用密钥验证每个请求

使用HMAC over SHA-256来创建参数的哈希。

。如果你的秘密是password1,你的GET参数是sensorId=123&temperature=21,你计算你的SHA-256哈希值。

HMAC("password1", "sensorId=123&temperature=21")

这给出了75e9ad4ebfa22b2fca2f4bb24d23b56e6f6d32aa285bcc84f42a3116a7e02b6a,这使得您的GET请求现在有以下查询字符串:

sensorId=123&temperature=21&hash=75e9ad4ebfa22b2fca2f4bb24d23b56e6f6d32aa285bcc84f42a3116a7e02b6a

您可以验证这些值使用相同的秘钥在服务器上给出相同的哈希值,从而减少任何篡改。

建议使用TLS(即https),因为这可以减轻任何重放攻击,并有助于您的URL格式不被窃听者确定。您可能还想添加一个日期和时间字段,您还可以计算散列,以防止攻击者可以看到原始格式重播GET请求。

最新更新