评论作者:rickmoynihan
感谢提高我的权限,Alex。
我本意不是想把布丁做得太多,但也许最终还是做过了!:-)
我的想法是,如果你正在使用转换器来映射/归约用户输入获取的值,那么攻击者可能导致循环早于预期中断;这可能会导致其他后果。我没有具体的攻击向量,但我见过sentinel ::halt,并想象一个用户可能将"clojure.core/halt"注入到HTTP头部。如果ring有一个将关键字化的中间件,那么你就有用户注入的转换器哨兵值,这个哨兵值随后可能被用来绕过其他字段的验证/编码/转义等。
然而,我稍微看了看{{halt-when}}和其它转换器的实现,发现关键字从不和用户数据混合;而且一些转换器函数使用::none来指示第一次遍历。所以我可能弄错了。我现在怀疑这是否值得解决。