优雅的系统调用haskell

时间:2011-06-12 18:04:46

标签: haskell kerberos system-calls

我正在建立一个网站,用户可以使用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 

这样的事情,应该是如此。我有三个问题。

  • usernamepassword字符串没有转义。这很重要,因为有一个网站将任何收到的输入传递给此函数。
  • 理想情况下,不应将password传递给kinit进程echo password |。是否有一些函数作为参数采用标准?
  • 同样,对于usernameusername应作为参数传递。我认为rawSystem解决了这个问题。

是否有任何系统功能可以帮助我在这里?

1 个答案:

答案 0 :(得分:6)

使用createProcess和来自System.Process的朋友。


关于安全性的说明:我建议不要通过未解释的方式传递任何字符串。您可以轻松地为命令编写解析器,从保证安全的解析结果中构建Haskell AST,然后将其呈现给系统命令。这样,您就可以获得针对字符串注入攻击的静态保证,由解析器的类型强制执行。