【问题标题】:Temperature sensor and web server flooding温度传感器和网络服务器泛滥
【发布时间】:2015-09-02 14:57:16
【问题描述】:

我无法为我的情况找到一个好的答案。

我有一些温度传感器 (Arduinos) 通过 GET HTTP 请求向我的网络服务器发送数据。

在每个请求中,温度都会与传感器的 ID 和日期一起存储在数据库中。

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

如何防止这种情况发生?

我正在考虑为传感器定义一个唯一的密码并通过 POST 请求“验证”它......但是如何实现呢?请求期间如何不盗号?

有什么推荐的读物吗?

【问题讨论】:

  • 如果问题是你是个坏人,最简单的解决办法就是变得更好:P

标签: security http web-applications arduino


【解决方案1】:

也许你可以:

  1. 使用密钥对事务的整个或敏感部分进行哈希处理,这样只有正确的密钥才能将请求解码回服务器。您将能够从真正的请求中分辨出假冒者。

  2. 最好限制服务器在一个时间范围内可以接受来自一个传感器的请求数量,这将保护它免受 DOS 和洪水攻击。

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

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

【讨论】:

  • 我喜欢#3,简单明了。也许不是那么安全,但是在相同 IP 的两个请求之间有时间限制我应该没问题。
【解决方案2】:

使用密钥对每个请求进行身份验证。

使用HMAC over SHA-256 来创建参数的散列。

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

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

this gives75e9ad4ebfa22b2fca2f4bb24d23b56e6f6d32aa285bcc84f42a3116a7e02b6a,这使您的 GET 请求现在具有以下查询字符串:

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

您可以使用相同的密钥验证这些值是否在服务器上提供相同的哈希值,从而减少任何篡改。

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

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    相关资源
    最近更新 更多