gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:19:38 29 4
gpt4 key购买 nike

在应用程序服务器上实现服务器发送事件时,可以终止消息并通过以下两个换行符结束它来发送消息:\n\n,如this documentation page所示。

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

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

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

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

编辑:为澄清起见,我几乎不知道是否有一种方法可以围绕每个消息完整扫描\n\n。如果不是,WebSockets是否存在相同的问题,即您需要整体扫描每条消息?因为如果是这样,那就没关系。但是,如果不是这种情况,那么似乎比SSE更倾向于使用websockets。

最佳答案

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

The representation of strings is similar to conventions used in the C family of programming languages. A string begins and ends with quotation marks. All Unicode characters may be placed within the quotation marks, except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F).



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

重要的是,没有人会潜入换行符,但这对服务器发送的事件而言并不是新事物, header 由一行换行隔开,并且也可以被篡改(如果编码不正确),请参见 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 - 在实现服务器发送的事件时如何有效地处理换行攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59162620/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com