评论作者:rickmoynihan
感谢提升我的权限,亚历克斯。
我并不是真的想要把布丁做得过头,但是也许最终我还是做到了!:-)
我的理由是,如果您使用转换器(transducer)来映射/合并从用户输入中获取的值,那么攻击者可能会导致循环提前终止,这可能会带来其他后果。我并没有具体想到攻击向量,但我也看到了“::halt”哨兵,并想象用户可能能够将“clojure.core/halt”注入HTTP头中。如果Ring有将键转换成关键字的中间件,那么您就有用户注入的转换器哨兵值,而这个哨兵值可能会被用来跳过其他字段的验证/编码/转义等。
然而,我更仔细地研究了`{{halt-when}}`和其他转换器的实现,这似乎关键值永远不会与用户数据混合;并且`::none`被用于表示某些转换器函数的第一次遍历。所以看起来我弄错了。现在我觉得这个问题不值得解决。