SORU
26 Temmuz 2009, Pazar


Nasıl güvenli bir şekilde Java bir dize bir dosya adı olarak kullanmak için kodlayabilir miyim?

Harici bir işlemden dize alıyorum. Bu Dize bir dosya adı ve dosya yazmak için kullanmak istiyorum. İşte bunu yapmak için benim kod parçacığını:

    String s = ... // comes from external source
    File currentFile = new File(System.getProperty("user.home"), s);
    PrintWriter currentWriter = new PrintWriter(currentFile);

Eğer geçersiz bir karakter içeriyorsa, ' / ' Unix tabanlı bir OS, bir java.gibi ıo.FileNotFoundException (haklı olarak) atılır.

Nasıl bir dosya adı olarak kullanılabilir, böylece güvenli bir şekilde Dize kodlamak miyim?

Edit: umut ediyorum bunu benim için yapan bir API çağrısı.

Bunu yapabilirim:

    String s = ... // comes from external source
    File currentFile = new File(System.getProperty("user.home"), URLEncoder.encode(s, "UTF-8"));
    PrintWriter currentWriter = new PrintWriter(currentFile);

Ama URLEncoder bu amaç için güvenilir olup olmadığından emin değilim.

CEVAP
26 Temmuz 2009, Pazar


Benim önerim "beyaz listesi" yaklaşımı, yani deneyin ve kötü karakterler filtre yok. bir almaktır TAMAM ne olduğunu tanımlamak yerine. Ya dosya adı reddetmek veya filtreleyebilirsiniz. Eğer filtre uygulamak istiyorsanız:

String name = s.replaceAll("\\W ", "");

Bu ne yapar herhangi bir karakter yerine geçerdeğilbir sayı, harf ya da bir şey ile çizgi. Alternatif olarak başka bir karakter alt çizgi gibi) ile değiştirin.

Sorun eğer bu paylaşılan bir dizin ise çarpışma dosya istemezsin. Eğer kullanıcı depolama alanları kullanıcı tarafından ayrılmış olsa bile sadece kötü karakterler filtreleyerek çarpışan bir dosya adı ile sona erebilir. Bir kullanıcı koymak adı varsa, onlar daha çok indirmek istiyorsanız genellikle yararlıdır.

Bu nedenle meyilli bir izin kullanıcı girmek için ne istiyorlar, deposu dosya adı dayalı bir düzeni benim kendi seçimi (örn userİd_fileİd) ve daha sonra mağaza kullanıcı adı veritabanı tablo. Bu şekilde kullanıcıya geri görüntülemek, istediğiniz şeyleri saklayabilir ve güvenliğine veya diğer dosyaları silip değilsin.

Ayrıca dosya hash (MD5 gibi) ama sonra kullanıcı koymak dosyaları (anlamlı bir adı her neyse ile değil) listeleyebilirsiniz.

EDİT:Sabit java düzenli ifade

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David MeShow

    David MeShow

    10 EKİM 2006
  • HowcastFoodDrink

    HowcastFoodD

    21 EYLÜL 2010
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007