[在实现服务器发送的事件时如何有效地处理换行攻击?

问题描述 投票:0回答:1

因此,如果您正在接收用户输入并将其转发给所有感兴趣的各方(在聊天应用程序中很常见)?恶意用户是否不能在有效载荷中插入两个换行符以尽早终止消息?更重要的是,既然他们现在可以访问一行的第一个字符,他们是否可以不设置诸如idretry字段之类的特殊字段?

[似乎唯一的替代方法是扫描它们的整个有效负载,然后用\n之类的内容替换\ndata:的实例,以便其整个消息有效负载必须保持其在data标记中的位置。] >

但是,这不是很低效吗?必须扫描每个消息的整个消息有效负载,然后可能进行替换,这不仅涉及扫描每个完整的负载,而且在恶意的情况下还需要重新分配。

还是有其他选择?我目前正试图在websocket和SSE之间做出决定,因为它们非常相似,这个问题使我对WebSockets有了更多的了解,因为如果他们能够避免这个潜在的漏洞,它们似乎会更有效率。] >

在应用程序服务器上实现服务器发送事件时,您可以终止消息并通过以下两个换行符结束来发送消息:\ n \ n,如本文档页面所示。因此,...

如果正确编码用户数据,则不必扫描有效负载。使用JSON,在服务器发送的事件中使用“数据”字段是安全的,因为JSON会对换行符进行解码并默认控制字符,如RFC所述:

字符串的表示类似于C中使用的约定编程语言家族。字符串开头和结尾引号。所有Unicode字符都可以放在引号,必须转义的字符除外:引号,反向固线和控制字符(U + 0000通过U + 001F)。

https://tools.ietf.org/html/rfc7159#page-8

重要的是,没有人会潜入换行符,但这对服务器发送的事件而言并不新鲜,标头由单个换行符隔开,也可以被篡改(如果编码不正确,请参见https://www.owasp.org/index.php/HTTP_Response_Splitting

[这里有一个使用json编码的服务器发送的应用程序示例:https://repl.it/@BlackEspresso/PointedWelloffCircles您甚至不能允许使用换行符来篡改数据字段

编码souldnt会阻止您使用服务器端事件,但是websocket和sse之间存在主要差异。作为比较,请参见以下答案:https://stackoverflow.com/a/5326159/1749420

javascript performance http security server-sent-events
1个回答
0
投票
如果正确编码用户数据,则不必扫描有效负载。使用JSON,在服务器发送的事件中使用“数据”字段是安全的,因为JSON会对换行符进行解码并默认控制字符,如RFC所述:
© www.soinside.com 2019 - 2024. All rights reserved.