> On Jun 24, 2016, at 7:47 PM, Quincey Morris 
> <quinceymor...@rivergatesoftware.com> wrote:
> 
> On Jun 24, 2016, at 16:24 , Charles Srstka <cocoa...@charlessoft.com> wrote:
>> 
>> How could this be a security threat, when a malicious program could just set 
>> canChooseDirectories to true, open the panel to the app’s parent directory, 
>> and spearphish the user into clicking OK on that?
> 
> (I wasn’t referring to opening apps, but to files generally.)
> 
> Clicking OK won’t do anything until the user selects something, and the app 
> can’t preset or change the selection. Maybe my logic is incorrect, but this 
> seems to me to prevent attempts to fool the user into choosing something 
> unintended.

func readTheFile(url: NSURL) {
    do {
        let data = try NSData(contentsOfURL: url, options: [])
        guard let string = String(data: data, encoding: NSUTF8StringEncoding) 
else {
            throw NSCocoaError.FileReadCorruptFileError
        }
        
        print("Contents of file: \(string)")
    } catch {
        print("Error occurred: \(error)")
    }
}

let url = NSURL(fileURLWithPath: "/path/to/MyGreatFile.txt")

print("First attempt:")
readTheFile(url)

let dirURL: NSURL = {
    while true {
        let openPanel = NSOpenPanel()
        
        openPanel.canChooseDirectories = true
        openPanel.directoryURL = url.URLByDeletingLastPathComponent
        openPanel.prompt = "OK"
        openPanel.message = "Please click OK"
        
        let answer = openPanel.runModal()
        
        if answer == NSFileHandlingPanelOKButton, let openPanelURL = 
openPanel.URL where openPanelURL == url.URLByDeletingLastPathComponent {
            return openPanelURL
        } else {
            let alert = NSAlert()
            
            alert.messageText = "Hey buddy, click the OK button when I tell you 
to, okay?"
            
            alert.runModal()
        }
    }
}()

print("Second attempt:")

dirURL.startAccessingSecurityScopedResource()
readTheFile(url)
dirURL.stopAccessingSecurityScopedResource()

--

After clicking OK when asked, this outputs:

First attempt:
Error occurred: Error Domain=NSCocoaErrorDomain Code=257 "The file 
“MyGreatFile.txt” couldn’t be opened because you don’t have permission to view 
it." UserInfo={NSFilePath=/path/to/MyGreatFile.txt, 
NSUnderlyingError=0x600000046750 {Error Domain=NSPOSIXErrorDomain Code=1 
"Operation not permitted"}}
Second attempt:
Contents of file: This is my great file!

Charles


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to