【发布时间】:2017-11-21 21:29:20
【问题描述】:
我正在使用 Yesod 编写个人备份系统,并遇到了一个有趣的问题。谈到 Haskell,我相对缺乏经验,所以我确信这些都不是最佳的。
这是我的处理程序之一:
postHostR :: Text -> RcPath -> Handler Text
postHostR hostName f = do
hostId <- insertIfDontExist hostName
tBody <- (T.pack . show) <$> getRawRequest
time <- lift getCurrentTime
newId <- runDB $ insert $ RcFile hostId tBody (makePath f) time
return $ T.pack $ show newId
我从数据库中检索到的任何文本都自动添加了双引号。我假设这是某种 XSS 安全性,但我并不担心,因为我不会渲染页面。引号似乎实际上并不是文本的一部分(我试过只去掉第一个和最后一个字符,但这似乎并没有真正删除引号)。
谢谢!
【问题讨论】:
-
我猜其中一个
show电话是罪魁祸首,但我不熟悉所涉及的软件包。show用于什么类型?您可以通过将每个调用更改为(show :: _)并查看错误来找出答案。 -
几乎可以肯定
newId是Text或String。注意show "abc" == "\"abc\"" -
果然,你们都对。我在
Text类型的东西上做show,我想正确的做法是使用unpack得到一个真正的字符串。请问有哪位能回答一下这个问题吗?
标签: haskell yesod persistent-storage