This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220SF:如何使用无缓存、无存储、必须重新验证来设置 HTTP 标头? 以及如何使用无缓存设置 pragma HTTP 标头?

Guru**** 2587365 points
Other Parts Discussed in Thread: CC3220SF

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1012171/cc3220sf-how-to-set-the-http-header-with-no-cache-no-store-must-revalidate-and-how-to-set-pragma-http-header-with-no-cache

器件型号:CC3220SF

您好!

安全测试套件已更新、并找到警报"未完成或无缓存控制和 Pragma HTTP 标头集"。

测试用例是使用"OWASP ZAP"攻击 CC3220SF 上运行的 http 服务器。

测试结果为:

缓存控制和 pragma HTTP 标头未正确设置或缺少、因此浏览器和代理无法缓存内容。

"OWASP  ZAP"建议的解决方案为:

尽可能确保高速缓存控制 HTTP 标头设置为无高速缓存、无存储、必须重新验证;并且 pragma HTTP 标头 设置为无高速缓存。

快照已附加。

我的问题是如何使用无高速缓存、无存储和必须重新验证来设置 HTTP 标头 ,以及如何使用无高速缓存来设置 pragma HTTP 标头?

我在源代码中找到了与缓存设置相关的某个位置、但我不确定。 因此、我请求您的专业支持。 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的林正平:

    是否测试网络处理器内部的内置 HTTP 服务器? 这主要用于 小型本地配置和配置、因此功能有限。 在 CC32xx SDK 中、还有一个在应用 MCU 上运行的 HTTP 服务器库。

    您能否分享有关您的应用用例和测试的更多信息?

    此致、

    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    感谢您的回复。

    是的、我们正在测试网络处理器内部的内置 HTTP 服务器。 我可以在我们的固件中找到 TI 提供的 HTTP 服务器源代码。  

    我们的应用用例是使用 CC3200SF 作为连接到控制单元的嵌入式器件的 MCU。 用户可以通过在浏览器中输入"192.168.1.1"访问嵌入式器件、然后配置我们的控制单元。 最近、安全测试工具(OWASP ZAP)已更新、并且在之前使用同一工具进行的测试中未找到 http 缓存设置的警报。 我没有关于此测试用例的更多信息。  

    以下是源代码中与 http 高速缓存相关的当前设置:

    httpcore.c

    if ((g_AddContentType = content_type_JS)||(g_AddContentType = content_type_CSS))//快速加载并减少连接数量

    const char cacheControlAge[]="max-age=86400";
    HttpResponse_AddHeaderLine (HTTP_cache_control、sizeof (HTTP_cache_control)-1、cacheControlAge、strlen (cacheControlAge));
    }  

    httpcore.h

    #define HTTP_Cache_EN  2  //启用高速缓存

    我可以想象修改上面的代码是这样的:

    //将  HTTP_cache_control 设置为“无高速缓存” ,并根据测试工具的要求禁用高速缓存

    HttpResponse_AddHeaderLine (HTTP_cache_control、sizeof (HTTP_cache_control)-1、cacheControlAge、strlen ("不高速缓存"));

    #define HTTP_Cache_EN  0  //禁用高速缓存

    从您的角度来看、这有道理吗? 还有任何要修改或添加的内容?

    我只能在 TI 的源代码中找到与 http 高速缓存相关的2个位置。 我找不到在哪里设置 pragma HTTP 标头。 也许我需要手动将其添加到源代码中(我在这里提到的"源代码"全部由 TI 提供)?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在开始深入了解您的代码之前、可能需要提及一件事。 不使用 http 标头缓存控制标头并不意味着安全问题。 可能存在一些"功能"问题、但如果您的应用程序已经正常工作、则情况并非如此。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的林正平:

    "内置"HTTP 服务器位于网络处理器内部、因此该源代码不在 SDK 中。 此 HTTP 服务器主要用于配置和配置、因此它具有特殊的器件令牌。 自定义 HTTP 请求传递给 SimpleLinkNetAppRequestEventHandler(),并使用 sl_NetAppSet()进行配置。 有关完整的详细信息、请参阅 NWP 编程人员指南的 HTTP 服务器部分。  ImageCreator 工具或应用程序代码可禁用此内置 HTTP 服务器。

    您的帖子中的源代码(在 SDK 文件夹 source/ti/net/http 中)不同。 这是 HTTP 服务器网络服务库、用于实现应用 MCU 上托管的 HTTP 服务器。 这与内置 HTTP 服务器完全不同。 此 HTTP 服务器库旨在为客户提供更大的灵活性、以便他们可以修改该库以满足其需求。

    您在应用程序中使用 HTTP 服务器的用途是什么?

    此致、

    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    我使用 HTTP 服务器确保我们的安全测试可以通过。 当前失败。

    最后、在我按照如下方式修改源代码后、安全测试可以通过:

    在 httpcore.h 中、禁用高速缓存  

    #define HTTP_Cache_EN  0  //禁用高速缓存

    在 httpcore.c 中、我用"max-age=86400"注释高速缓存控制、并使用 "no-store"、 "no-cache"和 "must -revalidate"添加高速缓存控制。 此外、我还 使用 "无缓存"设置 http pragma 控件。 因此、安全测试案例可以通过、"未完成或无缓存控制和 Pragma HTTP 标头集"警报消失! 但我想知道、如果我以这种方式更改代码、或者在其他任何地方也要修改代码、是否存在任何风险。

    //高速缓存控制:无存储
    const char cacheControlnoStore[]="no-store";
    HttpResponse_AddHeaderLine (HTTP_cache_control、sizeof (HTTP_cache_control)-1、cacheControlnoStore、strlen (cacheControlnoStore));

    //高速缓存控制:无高速缓存
    const char 高速缓存 ControlnoCache []="无高速缓存";
    HttpResponse_AddHeaderLine (HTTP_cache_control、sizeof (HTTP_cache_control)-1、cachepcontrolnoCache、strlen (cachepcontrolnoCache));

    //高速缓存控制:必须重新验证
    const char cacheControlmustReval[]="必须重新验证";
    HttpResponse_AddHeaderLine (HTTP_cache_control、sizeof (HTTP_cache_control)-1、cacheControlReval、strlen (cacheControlmustReval));

    //pragma:无缓存
    const char pragma []="无高速缓存";
    HttpResponse_AddHeaderLine (HTTP_pragma、sizeof (HTTP_pragma)-1、pragma、strlen (pragma));

    /* if ((g_AddContentType == content_type_JS)||(g_AddContentType == content_type_CSS))//快速加载并减少连接数量

    const char cacheControlAge[]="max-age=86400";
    HttpResponse_AddHeaderLine (HTTP_cache_control、sizeof (HTTP_cache_control)-1、cacheControlAge、strlen (cacheControlAge));
    }*/

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的林正平:

    对我来说没关系。 更改 HTTP 服务器库不会影响 SDK 或固件的其余部分。 但是、您有责任测试对库的任何更改。

    如果您担心安全性、还可以考虑在不使用内置 HTTP 服务器的情况下禁用该服务器。

    此致、

    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能告诉我如何禁用内置 HTTP 服务器吗? 如果我禁用它,用户是否可以从浏览器访问 Web 服务器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬 的林正平:

    内置的 HTTP 服务器可以从 ImageCreator 工具或使用 sl_NetAppStop() API 从应用程序代码中禁用。 请参阅 主机驱动程序 API 指南

    禁用内置 HTTP 服务器不 会影响 您在应用中使用的 HTTP 服务器库、因此浏览器功能将保持不变。

    需要注意 的是、内置 HTTP 服务器用于某些配置模式(AP 和 SmartConfig)。 如果您使用这些配置方法,则可以使用 SL_NetApp API 打开和关闭内置服务器。

    此致、

    Sarah