【问题标题】:how to convert a string to a clojure expression?如何将字符串转换为 clojure 表达式?
【发布时间】:2013-04-09 05:00:39
【问题描述】:

我想在一个字符串中发送一个 clojure 表达式,以便在接收器处进行评估,这可能是一个用 compojure 编写的 Web 服务。例如,假设我有字符串“(* 7 6)”,我想将其转换为 '(* 7 6),然后我可以将其传递给 eval 并得到 42。这个操作在 JavaScript 中是微不足道的,但是不太清楚如何在clojure中做到这一点。提示?

【问题讨论】:

  • 请注意,这将允许 Web 客户端(互联网上的任何人)在您的 Web 服务器进程中执行任意代码,例如重新定义变量、脱壳、删除文件等。
  • 知道了。在允许此操作之前,我的应用程序将对发件人进行身份验证和授权以获得完全信任。或者,它会解析、分析和/或沙箱注入的代码。

标签: clojure


【解决方案1】:

这应该可以解决问题:

(eval (read-string "(* 7 6)")) ;; 42

或者,简称:

(load-string "(* 7 6)") ;; 42

【讨论】:

  • 我觉得这里应该提一下;请注意,即使您不调用 eval,read-string 本身也会评估代码:(read-string "#=(clojure.java.shell/sh \"ls\")")
  • 我没有找到 #= 阅读器语法的文档。请您解释一下好吗?这是一个非常重要的观察!
  • 我在下面的 SW 问题stackoverflow.com/questions/6427967/clojure-reader-macro 中找到了答案。这是一个相当大的问题,因为如果不编写我自己的阅读器就无法阻止评估,并且可能会破坏我使用 clojure 进行安全注射的计划。
  • 好吧,我很高兴我当时提到了它。在实际执行代码时,您可能还想使用clojail
猜你喜欢
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多