http://www./yongboy/archive/2015/03/24/423791.html零。前言这里整理了一下错误和安全相关部分简单记录。 一。HTTP/2错误1. 错误定义HTTP/2定义了两种类型错误:
2. 错误代码错误代码,32位正整数表示错误原因,RST_STREAM和GOAWAY帧中包含。 未知或不支持的错误代码可以选择忽略,或作为INTERNAL_ERROR错误对待都可以。 3. 连接错误处理一般来讲连接错误很严重,会导致处理进程无法进行下去,或影响到整个连接的状态。
4. 流错误一般来讲具体流上的流错误不会影响到其它流的处理。
5. 连接终止TCP连接被关闭或重置时仍有处于"open"或"half closed"的流将不能自动重试。 二。HTTP/2安全注意事项1. 跨协议攻击跨协议攻击,字面上理解就很简单,比如攻击者构建HTTP/1.1请求直接转发给仅仅支持HTTP/2的服务器,以期待获取攻击效果。 这里有一篇讲解跨协议攻击的文章:http://www./articles/web/19622.html TLS的加密机制使得攻击者很难获得明文,另外TLS的ALPN协议扩展可以很轻松处理请求是否需要作为HTTP/2请求进行处理,总之可有效阻止对基于TLS的其它协议攻击。 基于标准版TCP没有TLS和ALPN的帮忙,客户端所发送连接序言前缀为PRI字符串用来混淆HTTP/1.1服务器,但对其它协议没有提供保护,仅限于此。但在处理时,若接收到HTTP/1.1的请求,没有包含Upgrade升级字段,则需要认为是一个跨协议攻击。 总之,程序要尽可能的健壮,容错,针对非法的请求,直接关闭对方连接。 2. 中介端数据转换封装的攻击中介所做的HTTP/1.1和HTTP/2之间转换,会存在攻击点:
解决方式,一旦发现非法头字段名称,以及非法头字段值,都作为不完整、残缺数据对待,或丢弃,或忽略。 3. 推送内容的缓存推送内容有保证的服务器提供,是否缓存由头字段Cache-Control控制。 但若服务器上多租户形式(SAAS),每一个租户使用一小部分URL空间,比如 tenant1.domain.com,tenant2.domain.com,服务器需要确保没有授权的租户不能够推送超于预期的资源,覆盖已有内容。 原始服务器没有被授权使用推送,既不能够违规发送推送,也不能够被缓存。 4. 拒绝服务攻击注意事项
总之,诸如SETTINGS帧、小帧或空帧,报头压缩被合理滥用时,表明上看符合逻辑,会造成资源过度消耗。这需要服务器端监控跟踪到此种行为,并且设置使用数量的上限,一旦发现直接报ENHANCE_YOUR_CALM类型连接错误。 5. 报头块大小限制报头块过大导致实现需要维护大量的状态开销。另外,根据报头字段进行路由的情况,若此报头字段出现在一系列报头块帧的最后一个帧里面,可能会导致无法正常路由到目的地。若被缓存会导致耗费大量的内存。这需要设置SETTINGS_MAX_HEADER_LIST_SIZE参数限制报头最大值,以尽可能的避免出现以上情况。 服务器一旦接收到超过报头限制请求,需要响应一个431(请求头过大) HTTP状态码,客户端呢可直接丢掉响应。 6. 压缩使用的安全隐患
7. 填充使用的安全隐患一般来讲,填充可用来混淆帧的真实负载长度,稍加保护,降低攻击的可能性。但若不当的填充策略:固定填充数、可轻松推导出填充规则等情况都会降低保护的力度,都有可能会被攻击者破解。 中介设备应该保留DATA帧的填充(需要避免如上所述一些情况),但可丢弃HEADERS和PUSH_PROMISE帧的填充。 三。TLSHTTP/2加密建立在TLS基础,关于TLS,维基百科上有解释:http://zh./wiki/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0 摘取一张图,可说明基于ALPN协议扩展定义的协商流程: 其它要求:
四。小结这里简单记录HTTP/2错误和安全相关事项,本系列规范学习到此告一段落。 |
|