2024年Clojure状态调查!中分享你的想法。

欢迎!请参阅关于页面了解更多关于此功能的信息。

0
转换器

在转换器中使用关键词作为哨兵值可能会导致一些应用程序在罕见情况下出现错误和潜在的安全风险。

(sequence (partition-by keyword) ["1" "none" "2" "clojure.core/none" "3" "4"]) ;(["1"] ["none"] ["2"] ["clojure.core/none" "3"] ["4"])

理想情况下,应使用无法注入函数域的私有或局部值,例如{{(Object.)}}。

5 答案

0

评论者:rickmoynihan

对于份例代码格式的错误表示歉意,我也没有打算将其视为重要问题。尽管我无法编辑它,也许别人可以。

0

评论者:rickmoynihan

还要感谢@reborg和@bronsa在#clojure-uk上分享上述代码片段。

0

评论者:alexmiller

Rick - 我已将你添加到必要的编辑权限组中。

这如何成为安全风险?

0

评论者:rickmoynihan

感谢提升我的权限,亚历克斯。

我并非有意过度干预布丁的制成,但也许最终还是那样做了!:-)

我的推理是,如果你使用传感器来对用户输入采集的值进行映射/归约,那么攻击者可能会使循环比预期早中断;这可能会产生其他后果。我没有具体的攻击向量在心头,但我也见过 ::halt 原子,并想象用户可能会将 "clojure.core/halt" 注入到 HTTP 头部。如果 ring 有关键字化键的中间件,那么你有用户注入的传感器注入的原子值作为哨兵值,而这个哨兵值随后可能会被用来绕过其他字段的验证/编码/转义等。

然而,我更仔细地看了看 {{halt-when}} 的实现以及其他传感器,看起来键从未与用户数据混合;并且 ::none 由某些传感器函数用来表示第一次遍历。所以,看来我犯了错误。现在我不太确定这个是否有解决的必要。

0
参考:https://clojure.atlassian.net/browse/CLJ-2312(由 rickmoynihan 报告)
...