If the two dots are meant to prevent switching to a parent directory you could 
change the regex to something like

fileName.replaceAll("(/|^)\\.\\.(/|$)", "$1$2“);

So this would only match two dots if they entirely describe a directory name 
and would match e.g.

/var/../etc/foo
/abc/..
../foo

but not if it is included within a name.

jw


> Am 24.07.2017 um 10:44 schrieb Fabian Peters <lists.fab...@e-lumo.com>:
> 
> Hi Ralf,
> 
>> I think the separator search has to match the platform running the app (and 
>> you may better use then a File object), or be much stricter and search 
>> always for all separators. For example suppose you are running on a Unix and 
>> get the following path:
>> 
>> \/etc/passwd
>> 
>> Now your file name is /etc/passwd.
> 
> True, you certainly cannot use the output of this method to get a "secure" 
> filename. I think the intent of this method is just to get the client side 
> file name, which is why I'm surprised about the "tiny security check". I'd 
> vote for removing it…
> 
> cheers, Fabian
> 
>> Ralf
>> 
>> Am 21. Juli 2017 um 20:30:01, Fabian Peters (lists.fab...@e-lumo.com) 
>> schrieb:
>> 
>>> Hi all, 
>>> 
>>> This is a bit of a quiz question. The method pasted below replaces any two 
>>> dots ("..") in a file name with a single underscore ("_"). If the user 
>>> uploads a file named "Test..doc", it ends up as "Test_doc". Which is less 
>>> than ideal because often one wants to get some idea about the file type by 
>>> looking at the extension.  
>>> 
>>> Apparently Mike's (it's his code) intent was security-related. Can anyone 
>>> come up with a potential vulnerability beyond the case of a file named 
>>> ".."? (Which could theoretically lead to a file being written to the parent 
>>> directory of the destination, though I haven't been able to actually do 
>>> this.) 
>>> 
>>> cheers, Fabian 
>>> 
>>> /** 
>>> * Returns the file name portion of a browser submitted path. 
>>> *  
>>> * @param path the full path from the browser 
>>> * @return the file name portion 
>>> */ 
>>> public static String fileNameFromBrowserSubmittedPath(String path) { 
>>> String fileName = path; 
>>> if (path != null) { 
>>> // Windows 
>>> int separatorIndex = path.lastIndexOf("\\"); 
>>> // Unix 
>>> if (separatorIndex == -1) { 
>>> separatorIndex = path.lastIndexOf("/"); 
>>> } 
>>> // MacOS 9 
>>> if (separatorIndex == -1) { 
>>> separatorIndex = path.lastIndexOf(":"); 
>>> } 
>>> if (separatorIndex != -1) { 
>>> fileName = path.substring(separatorIndex + 1); 
>>> } 
>>> // ... A tiny security check here ... Just in case. 
>>> fileName = fileName.replaceAll("\\.\\.", "_"); 
>>> } 
>>> return fileName; 
>>> } 
>>> 
>>> _______________________________________________ 
>>> Do not post admin requests to the list. They will be ignored. 
>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) 
>>> Help/Unsubscribe/Update your Subscription: 
>>> https://lists.apple.com/mailman/options/webobjects-dev/rasc%40gmx.de 
>>> 
>>> This email sent to r...@gmx.de 
>> -- 
>> Ralf Schuchardt
>> Sent with Airmail


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

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

Reply via email to