使用RGoogleDocs时如何防止密码泄露?

时间:2011-05-23 18:57:33

标签: r passwords google-docs rstudio

我爱RGoogleDocs并且经常使用它。但是,我不喜欢一直输入密码。显然我可以在R脚本中输入密码,而不必再次输入密码。但这不可行,因为这意味着我的密码将在我的硬盘上保持未加密状态。此外,我与同事分享我的脚本。

为了解决这个问题,我提出了这个问题。

if(exists("ps")){
  print("got password, keep going")
} else {
  ps <-readline(prompt="get the password in ")
}

options(RCurlOptions = list(
  capath = system.file("CurlSSL", "cacert.pem", 
  package = "RCurl"), ssl.verifypeer = FALSE)
)

sheets.con = getGoogleDocsConnection(
  getGoogleAuth("notreal@gmail.com", ps, service ="wise")) 

#WARNING: this would prevent curl from detecting a 'man in the middle' attack
ts2=getWorksheets("hpv type",sheets.con)

我喜欢使用RStudio。当我看到办公室里的任何同事显示我的密码时,我感到很不舒服。我使用了假密码,但看看图像。 my password would be in plain view for all to see in RStudio。此外,如果我保存了一个工作区,我的密码会随之保存,如果几个月之后,当我很久以前忘记了它的内容时,我担心我会把它交给别人,我发送了我的.RData向同事提交。

我在earlier post中阅读了关于R中密码的一般信息。在使用RGoogleDocs时,它没有给我足够的信息来隐藏我的密码。

7 个答案:

答案 0 :(得分:23)

我的方法是设置登录名和&amp; R选项列表中的密码 在R启动文件.Rprofile内。然后我的代码获取值 使用getOption()然后该值永远不可见或存储 在globalenv()中的顶级变量中。 (如果 一个人通过dump.frames)进行事后调试。

至关重要的是.Rprofile除了你以外的任何人都无法阅读。

所以

options(GoogleDocsPassword = c(login = 'password'))

.Rprofile然后

auth = getGoogleAuth()

只是作为第一个参数的默认值工作,即查找GoogleDocsPassword选项。

d

答案 1 :(得分:7)

我有同样的问题,没有真正的解决方案。我使用的解决方法是,我为此目的创建了一个谷歌帐户,密码是我不关心的。然后,我分享了我希望R使用该帐户访问的文档。

但如果有人对我最感兴趣的初步问题有答案。

答案 2 :(得分:3)

好像你会将密码存储在你的选项中而不是“ps”直接使用“getOption”。可是有更好的解决方案。

答案 3 :(得分:3)

您可以将密码存储在计算机上的一个文件中,编码完毕并使用类似

之类的内容进行调用

getPassword&lt; - function(file =密码文件的位置){ unencode (readLines(file))}

在.Rprofile中设置它并在代码中使用

getPassword来()。

这不会将您的密码存储在任何R文件中,您可以在文件中内置检查。

答案 4 :(得分:3)

如果你真的不想将它存储在任何地方,那么一个解决方案就是不要使用变量作为密码,甚至可能是谷歌帐户地址!在linked answer的基础上,为什么不尝试

library(tcltk)
library(RGoogleDocs)

getHiddenText <- function(label = "Enter text:", symbol = "*", defaultText = ""){  
    wnd <- tktoplevel()
    entryVar <- tclVar(defaultText)  
    tkgrid(tklabel(wnd, text = label))
    #Entry box
    tkgrid(entryBox <- tkentry(wnd, textvariable = entryVar, show = symbol))
    #Hitting return will also submit text
    tkbind(entryBox, "<Return>", function() tkdestroy(wnd))
    #OK button
    tkgrid(tkbutton(wnd, text="OK", command=function() tkdestroy(wnd)))
    #Wait for user to submit  
    tkwait.window(wnd)
    return(tclvalue(entryVar))
}  

repeat {
    con <- try(getGoogleDocsConnection(getGoogleAuth(
        getHiddenText(
            label = "Enter google account:",
            symbol = "", # or set to "*" to obscure email entry
            defaultText = "@gmail.com"), # a little timesaver
        getHiddenText(
            label = "Enter password:",
            symbol = "*",
            defaultText = ""),
        service = "wise")))
    if (inherits(con, "try-error")) {
        userResponse <- tkmessageBox(
            title = "Error",
            message = "Couldn't connect to Google Docs. Try again?",
            icon = "error", type = "yesno")
        if (tclvalue(userResponse) == "no") {
            stop("Unable to connect to Google Docs, user cancelled.")
        }        
    } else { # connection successfully authenticated
        break() # so escape the repeat loop
    }
}

答案 5 :(得分:2)

对于这样的事情,我与谷歌文档共享一个电子邮件地址,创建一个谷歌帐户,然后用它来共享和授权。因此,将我的个人登录详细信息与脚本运行所必需的内容分开。

答案 6 :(得分:0)

使用应用专用密码进行2步认证怎么办? 您可以使用特定于应用程序的密码,而无需透露真实密码。 如果你愿意,你可以撤销它!