Użytkownicy mojej aplikacji przesyłają swoje pliki do jednego zasobnika. Jak mogę się upewnić, że każdy obiekt w moim zasobniku S3 ma unikalny klucz, aby zapobiec zastępowaniu obiektów?

W tej chwili szyfruję nazwy plików losowym ciągiem w moim skrypcie php przed wysłaniem pliku do S3.

Na potrzeby dyskusji załóżmy, że przesyłający znajduje sposób na manipulowanie nazwą pliku podczas przesyłania. Chce zastąpić wszystkie obrazy na mojej stronie obrazem banana< /a>. Jaki jest dobry sposób, aby zapobiec nadpisywaniu plików w S3, jeśli szyfrowanie nie powiedzie się?

Edycja: nie sądzę, że wersjonowanie będzie działać, ponieważ nie mogę określić identyfikatora wersji w adresie URL obrazu podczas wyświetlania obrazów z mojego zasobnika.

8
CyberJunkie 30 wrzesień 2012, 05:34

2 odpowiedzi

Najlepsza odpowiedź

Szyfrujesz czy haszujesz? Jeśli używasz skrótów md5 lub sha1, napastnik może łatwo znaleźć kolizję skrótów i sprawić, że poślizgniesz się na skórce banana. Jeśli szyfrujesz bez losowego wektora inicjalizacji, osoba atakująca może być w stanie wywnioskować Twój klucz po przesłaniu kilkuset plików, a szyfrowanie prawdopodobnie nie jest najlepszym rozwiązaniem. Jest to obliczeniowo kosztowne, trudne do wdrożenia i można uzyskać bezpieczniejszy mechanizm do tej pracy przy mniejszym wysiłku.

Jeśli do każdej nazwy pliku dodasz losowy ciąg znaków, używając w miarę wiarygodnego źródła entropii, nie powinieneś mieć żadnych problemów, ale powinieneś sprawdzić, czy plik już istnieje. Chociaż kodowanie pętli w celu sprawdzenia, użycie S3::GetObject i wygenerowanie nowego losowego ciągu może wydawać się dużym wysiłkiem w przypadku czegoś, co prawie nigdy nie będzie musiało zostać uruchomione, „prawie nigdy” oznacza, że ​​istnieje duże prawdopodobieństwo, że w końcu się wydarzy .

3
Terence Johnson 30 wrzesień 2012, 06:02

Sprawdzenie pliku o tej nazwie przed przesłaniem będzie działać.

Jeśli plik już istnieje, zmień losowo nazwę pliku i spróbuj ponownie.

-1
Johnathon Malizia 30 wrzesień 2012, 05:46