因此,如果您正在接收用户输入并将其转发给所有感兴趣的各方(在聊天应用程序中很常见)?恶意用户是否不能在有效载荷中插入两个换行符以尽早终止消息?更重要的是,既然他们现在可以访问一行的第一个字符,他们是否可以不设置诸如id
和retry
字段之类的特殊字段?
[似乎唯一的替代方法是扫描它们的整个有效负载,然后用\n
之类的内容替换\ndata:
的实例,以便其整个消息有效负载必须保持其在data
标记中的位置。] >
但是,这不是很低效吗?必须扫描每个消息的整个消息有效负载,然后可能进行替换,这不仅涉及扫描每个完整的负载,而且在恶意的情况下还需要重新分配。
还是有其他选择?我目前正试图在websocket和SSE之间做出决定,因为它们非常相似,这个问题使我对WebSockets有了更多的了解,因为如果他们能够避免这个潜在的漏洞,它们似乎会更有效率。] >
在应用程序服务器上实现服务器发送事件时,您可以终止消息并通过以下两个换行符结束来发送消息:\ n \ n,如本文档页面所示。因此,...
字符串的表示类似于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