2017-11-21 34 views
2

저는 개인 백업 시스템을 작성하고 흥미로운 문제로 실행하기 위해 Yesod를 사용하고 있습니다. 나는 하스켈에 관해서는 상대적으로 경험이 없기 때문에 이것들 중 어느 것도 최적이라고 확신하지는 않는다.입력시 따옴표가 자동으로 추가됩니다.

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 

나는 DB에서 검색 텍스트의 상관 자동으로 추가 따옴표가 있습니다 : 여기

내 핸들러 중 하나입니다. 나는 이것이 일종의 XSS 보안이라고 생각하지만, 페이지를 렌더링하지 않을 것이므로 걱정하지 않는다. 따옴표는 실제로 텍스트의 일부가 아닌 것 같습니다 (첫 번째 문자와 마지막 문자는 제거했지만 실제로는 따옴표를 제거하지 않은 것 같습니다).

감사합니다.

+4

비난하는 것입니다,하지만 난 익숙하지 않다;

(이 여기에서 말할 어렵다. 다시, 나는 유형 서명에 대해 완전히 잘못 될 수 있음) 패키지가 관련되어 있습니다. '쇼'는 어떤 타입입니까? 각각의 호출을'(show :: _)'로 변경하고 에러를 보면 알 수 있습니다. – dfeuer

+2

거의 확실하게'newId'는'Text' 또는'String'입니다. 'show "abc"== "\"abc \ "" –

+0

물론, 당신이 맞습니다. 나는'Text' 타입의 어떤 것에'show'를하고 있었고, 할 일은'unpack'을 사용해서 실제 문자열을 얻는 것입니다. 여러분 중 한 명이 질문에 대답 해 주시겠습니까? –

답변

4

이 문제의 일반적인 원인은 문자열이 있고 필요하지 않을 때 show을 호출했기 때문입니다.

귀하의 경우에는

, 나는 형의 서명 확실 해요 (대부분 일반적으로 그들이 진짜로 putStrLn x를 원 할 때 누군가. print x를 않습니다),하지만 난 당신의 마지막 줄이

return $ T.pack $ show newId 

에서 변경 될 수 의심 단지

return newId 

에 나는 그렇게를 호출, newId 이미 Text 의심그냥 주위에 원치 않는 따옴표를 넣습니다 (그리고 그것을 String으로 바꾼 다음 T.pack을 사용하여 Text으로 되돌아갑니다). 당신이 그것을 돌려 주면 아마도 효과가있을 것입니다.

내가 그`show` 통화 중 하나 같은데요
+0

필자는 필자가 지금 알고있는'unpack '대신에'Text'에'show'를 사용하고있었습니다. 귀하의 대답은 여전히 ​​유효합니다. 감사. –