输入已自动添加引号

时间:2017-11-21 01:21:21

标签: haskell yesod persistent-storage

我使用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安全性,但我并不担心,因为我不打算渲染页面。引号似乎实际上并不是文本的一部分(我试图剥离第一个和最后一个字符,但这似乎并没有实际删除引号)。

谢谢!

1 个答案:

答案 0 :(得分:4)

此问题的常见原因是您有一个字符串,并且当您不需要时,您已在其上调用show。 (最常见的是有人在他们真正想要print xputStrLn x。{/ p>

在您的情况下,我不确定类型签名,但我怀疑您的最后一行可以更改

return $ T.pack $ show newId

return newId

我怀疑newId 已经 Text,因此在其上调用show只会在其周围添加不​​需要的引号(并将其转换为String然后,您使用T.pack转回Text)。如果你只是归还它,它可能会起作用。

(然后,我可能完全弄错了类型签名;从这里很难说出来。)