我使用Clojure/Ring/Compojure-0.4/Enlive堆栈来构建Web应用程序。在Clojure/Compojure中逃脱/消毒用户输入
此堆栈中是否有函数为了防止XSS攻击而剥离HTML或HTML编码(即<a>
到<a>
)用户提供的字符串?
我使用Clojure/Ring/Compojure-0.4/Enlive堆栈来构建Web应用程序。在Clojure/Compojure中逃脱/消毒用户输入
此堆栈中是否有函数为了防止XSS攻击而剥离HTML或HTML编码(即<a>
到<a>
)用户提供的字符串?
事实证明Enlive 确实如果您使用net.cgrand.enlive-html/content
将文本放入HTML元素,则默认转义HTML。
(sniptest "<p class=\"c\"></p>" [:.c] (content "<script></script>"))
"<p class=\"c\"><script></script></p>"
更新:我知道必须有比这更...
ring.util.codec
从ring-core
有一个叫功能,这工作就像这样:
user> (require '[ring.util.codec :as c])
nil
user> (c/url-encode "<a>")
"%3Ca%3E"
user> (c/url-decode "<a>")
"<a>"
这些是包装器java.net.URLEncoder
和java.net.URLDecoder
。基于Apache Commons的一个类,相同的命名空间提供了处理Base64编码的函数。
原始答案如下。
我不知道是否有公共职能要做到这一点,但Enlive
有两个私有函数调用xml-str
和attr-str
该这样做:(attr-str
也逃脱"
)
(defn- xml-str
"Like clojure.core/str but escapes < > and &."
[x]
(-> x str (.replace "&" "&") (.replace "<" "<") (.replace ">" ">")))
您可以通过@#'net.cgrand.enlive-html/xml-str
(Clojure不倾向于使事情真的私人...)或只是将它复制到您自己的名称空间。
hiccup.util/escape-html
in hiccup做到了。这个函数曾经是Compojure本身(因为hiccup中的所有功能都曾经是Compojure的一部分)。这是一个简单的功能,你可以很容易地自己写。
(defn escape-html
"Change special characters into HTML character entities."
[text]
(.. #^String (as-str text)
(replace "&" "&")
(replace "<" "<")
(replace ">" ">")
(replace "\"" """)))
还有clojure.contrib.string/escape
,这需要地图炭 - >字符串转义序列和一个字符串,并逃脱它。
user> (clojure.contrib.string/escape {\< "<" \> ">"} "<div>foo</div>")
"<div>foo</div>"
这令我不是有用,因为它可能是,因为你可能想逃跑的多字符序列,这不会让你。但它可能适用于HTML转义需求。
然后,当然有很多Java库。你可以使用StringEscapeUtils从Apache的百科全书:
(org.apache.commons.lang.StringEscapeUtils/escapeHtml4 some-string)
这令我有点重量级为此,虽然。
StringEscapeUtils的正确URL http://commons.apache.org/lang/api-release/org/apache/commons/lang/StringEscapeUtils.html – grm 2010-08-27 12:02:46
更新后的网址http://commons.apache.org/proper/commons-朗/ javadocs中/ API-3.1 /组织/阿帕奇/公地/ lang3/StringEscapeUtils.html – 2014-01-22 12:38:19
这有点令人失望。听起来像是大多数Clojure Web框架中的主要监督。 – 2010-05-24 14:53:59
显然情况并不那么糟糕:请参阅最新的答案。:-) – 2010-05-24 15:08:34
看起来我有点仓促责怪Enlive,但无论如何感谢。 :) – 2010-05-25 09:54:40