输入已自动添加引号
Input has quotes automatically added
我正在用Yesod写一个个人备份系统,运行遇到一个有趣的问题。我在 Haskell 方面相对缺乏经验,所以我确信 none 这是最佳选择。
这是我的一位管理员:
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
。 (最典型的是有人在他们真正想要 putStrLn x
的时候 print x
。)
对于你的情况,我不确定类型签名,但我怀疑你的最后一行可以从
return $ T.pack $ show newId
只是
return newId
我怀疑 newId
已经 Text
,所以调用 show
只是在它周围加上不需要的引号(并将其变成a String
,然后使用 T.pack
将其变回 Text
)。如果你只是 return 它,它可能会起作用。
(话又说回来,我可能完全误会了类型签名;从这里很难分辨。)
我正在用Yesod写一个个人备份系统,运行遇到一个有趣的问题。我在 Haskell 方面相对缺乏经验,所以我确信 none 这是最佳选择。
这是我的一位管理员:
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
。 (最典型的是有人在他们真正想要 putStrLn x
的时候 print x
。)
对于你的情况,我不确定类型签名,但我怀疑你的最后一行可以从
return $ T.pack $ show newId
只是
return newId
我怀疑 newId
已经 Text
,所以调用 show
只是在它周围加上不需要的引号(并将其变成a String
,然后使用 T.pack
将其变回 Text
)。如果你只是 return 它,它可能会起作用。
(话又说回来,我可能完全误会了类型签名;从这里很难分辨。)