优雅的系统调用haskell

| 我正在建立一个网站,用户可以在其中使用kerberos服务进行登录。不过,这与我的问题无关。 由于我正在使用kerberos,因此我想使用系统调用来调用
kinit
,但是我不知道执行此操作的最佳方法。 到目前为止,我得到了:
module Kerberos where

system :: String -> IO ExitCode
-- system is loaded through imports

type Username = String
type Password = String

kerberosValidate :: Username -> Password -> IO Bool
kerberosValidate username password = fmap (== ExitSuccess) $ 
  system $ \"echo \" ++ password ++ \" | kinit \" ++ username 
像这样的东西,应该会这样。我对此有三个问题。
username
password
字符串没有转义。这很重要,因为有一个网站将任何收到的输入传递给该功能。 理想情况下,
password
不应与
echo password |
一起传递给ѭ0to过程。是否有一些函数以standard为参数? 类似地,对于
username
,应将
username
作为参数传递。我想
rawSystem
解决了这个问题。 有什么系统功能可以帮助我吗?     
已邀请:
        使用
createProcess
System.Process
中的朋友。 安全注意事项:建议不要将任何字符串传递给未解释的字符串。您可以轻松地为命令编写一个解析器,从可以保证安全的解析结果中构建Haskell AST,然后将其呈现给系统命令。这样,您将获得针对字符串注入攻击的静态保证,该攻击由解析器的类型强制执行。     

要回复问题请先登录注册