17

Mam zamiar zbudować stronę za pomocą Google App Engine. Moja strona publiczna zawiera tysiące zdjęć. Chcę przechowywać te zdjęcia w chmurze: Google Storage lub Amazon S3 lub Google App Engine BlobStore. Problem polega na tworzeniu hotlinkingu obrazu.Google Storage lub Amazon S3 lub Google App Engine BlobStore

  1. Jeśli chodzi o Google Storage, szukałem w Google i nie mogę znaleźć sposobu, aby zapobiec tworzeniu się hotlinkingu obrazu. (Bardzo lubię narzędzie gsutil z linii poleceń)

  2. Amazon S3 ma "uwierzytelnianie za pomocą kwerendy", które generuje wygasające adresy URL obrazu. Ale to bardzo źle wpływa na SEO, prawda? Ciągłe zmienianie adresu URL będzie miało bardzo negatywne skutki, ponieważ pobranie obrazu i związanego z nim adresu URL do Grafiki Google zajmuje ponad rok. Jestem pewien, że zmiana adresu URL będzie miała natychmiastowy negatywny wpływ, gdy GoogleBot pojawi się, by przywitać się. (UPDATE:. Lepszym sposobem preven obrazu hotlinking w Amazon S3 przy użyciu zasad jest polecający Wiadro Szczegóły tutaj: http://www.naveen.info/2011/03/25/amazon-s3-hotlink-prevention-with-bucket-policies/)

  3. Google App Engine Blobstore? Muszę ręcznie przesłać obrazy za pomocą interfejsów sieciowych i generuje również zmieniające się adresy URL:. (zmiana:.. Z powodu mojej niewiedzy na temat Blobstore, po prostu popełnił błąd przy użyciu Google App Engine Blobstore można używać niezależnie url służyć obraz, który chcesz)

Co potrzebne jest proste ochrona reselerów: pokazuj obraz tylko wtedy, gdy strona odsyłająca jest moją witryną.

Czy istnieją lepsze sposoby zapobiegania tworzeniu się hotlinkowania obrazu. Nie chcę złożyć bankructwa z powodu bardzo wysokich kosztów przepustowości chmury.

UPDATE:

Wciąż trudno wybrać spośród trzech, każdy z nich ma wady i zalety. BlobStore wydaje się być najlepszym wyborem.

+2

I Nie jestem pewien, ale byłbym zaskoczony, gdyby można było umieścić swoje obrazy w Wyszukiwarce grafiki Google, jeśli zapobiegniesz tworzeniu hotlinkingu. –

+0

@sharth: Dobrze. Właśnie przeszukaliśmy, w Googlebocie nie ma strony odsyłającej. Tylko jeden agent: Googlebot-Image/1.0. – DocWiki

+0

Czy udało ci się zapobiec tworzeniu linków? Twoje zdrowie. – vtortola

Odpowiedz

7

Najprostszą opcją byłoby użycie blobstore. Możesz podać dowolny interfejs do przesyłu danych - musisz go napisać - a blobstore nie ogranicza twoich adresów URL do pobierania, tylko te, które przesyłasz. Możesz wyświetlać obrazy blobstore pod dowolnym adresem URL, ustawiając odpowiednie nagłówki, lub możesz użyć get_serving_url, aby skorzystać z wbudowanej obsługi wyświetlania szybkiej grafiki, która generuje ukryte, ale spójne adresy URL (ale nie pozwala ci na sprawdzanie referer) .

Sugerowałbym rozważenie, czy jest to rzeczywisty, praktyczny problem, z którym się mierzysz. Przepustowość zużywana przez kilka hotlinkowanych obrazów jest minimalna według dzisiejszych standardów i nie jest to szczególnie popularna praktyka. Jak zaznacza @ sharth w komentarzach, prawdopodobnie wpłynie to również na SEO, ponieważ wyszukiwanie obrazów może pokazywać obrazy w ich własnych oknach, a także linkowanie do strony, która je hostowała.

+0

Czy istnieje narzędzie wiersza poleceń do przesłania obrazu do pliku blobstore? – DocWiki

+0

@DocWiki Nie, ale interfejsy blobstore API są dostępne przez remote_api, więc możesz napisać jeden dość prosto. –

+0

Skoro już tu jesteś, chcę wiedzieć coś o Blobstore. Wiem, że w silniku aplikacji jest 30 s na limit żądania. Czy ten limit będzie obowiązywał po przesłaniu filmu do silnika aplikacji Blobstore? Maksymalny rozmiar pojedynczego pliku dla Blobstore to 2 GB, a jeśli prześlę przez formularz HTML, może to potrwać kilka godzin. Czy będzie obowiązywać limit 30 sekund na żądanie? – DocWiki

1

Kiedy wracałem do kodowania statystycznych serwisów internetowych, musiałem dynamicznie generować obrazy i wykresy. Generowane obrazy zależą od parametru żądania, stanu repozytorium danych i niektórych informacji nagłówkowych.

Dlatego też, gdybym był tobą, napisałbym usługę sieciową REST, aby wyświetlać obrazy. Nie za trudne. Jest to również bardzo drażliwe, ponieważ jeśli nie podoba ci się konkretny adres IP, możesz pokazać kreskówkę z języka-out-of-cheek (lub animowanego gifa tańczącego samba OBL podczas bombardowania) zamiast obrazu dla żądania danych.

Dla swojej sprawy możesz sprawdzić odnośnik (lub referrer) w nagłówku http, prawda? Jestem wątpliwy, ponieważ ludzie mogą i będą ukrywać, wyrzucać lub nawet fałszować pole odsyłające w nagłówku http.

Sprawdzaj nie tylko pole refererów, ale utwórz pole danych, w którym zmieni się wartość. Wartość może być prostym dopasowaniem wartości.

Podczas wojny światowej Roosevelt i Churchill przekazywali szyfrowanie thro. Każdy z nich miał identyczny stos dysków, które w jakiś sposób zawierały mechanizm szyfrowania. Po każdej rozmowie obie odrzuciły dysk (i nigdy nie zostały ponownie użyte), aby następnym razem, gdy ponownie się odezwali, sięgnęły po następny dysk na stosie.

Zamiast stosu dysków, konsumenci obrazu i dostawca obrazu mieliby ten sam stos 32-to bitowych żetonów. 32 bity dawałyby około 4 miliardy dziesięciominutowych okresów. Stos jest losowo sekwencjonowany. Ponieważ dobrze wiadomo, że "generatory losowe" nie są prawdziwie losowe i faktycznie algorytmiczne w sposób, który można przewidzieć, jeśli dostarczono wystarczająco długą sekwencję, należy albo użyć "prawdziwego generatora losowego", albo resekwencji stosu co tydzień.

Z powodu problemów z opóźnieniem dostawca zaakceptuje tokeny z bieżącego okresu, ostatniego okresu i następnego okresu. Gdzie okres = sektor.

Twój klient ajax (prawdopodobnie gwt) w przeglądarce otrzyma zaktualizowany token z serwera co dziesięć minut. Klient ajax używał tego tokena do żądania obrazów. Twoja usługa dostawcy obrazu odrzuci stały token i twój klient ajax będzie musiał zażądać nowego tokena z serwera.

Nie jest to metoda ognioodporna, ale jest nietłukąca, dzięki czemu może zmniejszyć/zniechęcić liczbę żądań spamu (prawie do zera, jak przypuszczam).

Sposób generowania sekwencji "prawdziwie losowych" jest znów szybki i brudny. Dalej pracuję nad wygenerowaną algorytmicznie sekwencją "losową", poświęcając kilka minut na ręczne wyrzucanie kilku kluczy małpek, ręcznie resekwencjonując lub usuwając wartości sekwencji. To zepsułoby jakąkolwiek przewidywalność algorytmiczną. Być może, mógłbyś napisać miotaczem małp. Ale algorytmiczne narzędzie do rzucania małpami po prostu dodawałoby przewidywalny algorytm nad innym przewidywalnym algorytmem, który wcale nie zmniejsza ogólnej przewidywalności.

Można dodatkowo obsesyjnie zawęzić sytuację, stosując algorytmiczne dopasowanie redundancji jako szybki i brudny "szyfrowany" mechanizm dopasowywania tokenów.

Załóżmy, że masz okrąg podzielony na 8 równorzędnych sektorów. Będziesz miał 3-cyfrowy numer binarny, aby móc adresować dowolne ze wszystkich 8 sektorów. Wyobraź sobie, że każdy sektor jest podzielony na 8 podsektorów, dzięki czemu teraz będziesz w stanie adresować każdy podsektor z dodatkowymi 3 bajtami, co daje w sumie sześć bajtów.

Planujesz zmienić pasującą wartość co 10 minut. Twój dostawca obrazu i wszyscy zatwierdzeni odbiorcy będą mieli ten sam stos adresów sektorowych. Co dziesięć minut wyrzucają adres sektora i używają następnego. Kiedy konsument wysyła do dostawcy swoją pasującą wartość, nie wysyła adresu sektora, ale adres podsektora. Tak więc, dopóki dostawca otrzyma adres podsektora należący do aktualnie akceptowanego sektora, usługa dostawcy będzie odpowiadać poprawnym obrazem.

Ale adres podsektora jest odwzorowywany za pomocą algorytmu sekwencjonowania obfuskacji. tak, że każdy adres podsektora w tym samym sektorze nie wygląda wcale w ogóle. W ten sposób nie wszystkie przeglądarki otrzymałyby taką samą wartość tokenu lub bardzo podobną wartość tokena.

Załóżmy, że masz 16-bitowe adresy sektorów, a każdy sektor ma 16-bitowe adresy podsektorów, tworząc 32-bitowy token. Oznacza to, że możesz pozwolić sobie na 65536 jednoczesnych klientów przeglądarki z tym samym sektorem tokenów, ale tam, gdzie żaden z dwóch tokenów nie ma tej samej niskiej wartości przewidywalności. Aby można było przypisać wartość podnektora tokena dla każdego identyfikatora sesji. Jeśli nie masz więcej niż 65536 sesji równoległych do usługi dostawcy obrazu, dwa identyfikatory sesji nie muszą udostępniać tego samego adresu tokenu podsektora. W ten sposób, o ile spamer nie uzyskał dostępu do identyfikatora/urządzeń służących do identyfikowania sesji, nie byłoby możliwości, aby dostawca obrazu był spamem, z wyjątkiem ataku typu odmowa usługi.

Niska przewidywalność oznacza, że ​​istnieje małe prawdopodobieństwo, aby snooper lub podglądający mógł wymyślić akceptowany token do spamowania usługi dostawcy obrazu.

Z pewnością normalne boty nie będą w stanie uzyskać thro - chyba, że ​​naprawdę obraziłeś grupę ANNONYMOUS i postanowili spamować twój serwer z czystej zabawy. I nawet wtedy, gdybyś rzucił małpie klucze na mapy adresów sektorów i podsektorów sektorów, naprawdę trudno byłoby przewidzieć następny token.

BTW, dopasowanie cyklicznego nadmiarowości jest w rzeczywistości techniką korekcji błędów, a nie techniką szyfrowania.

+0

LOL O czym ty mówisz? FYI Mój angielski ssie – DocWiki

+5

Wow. 1) Celem zapobiegania hotlink jest uniemożliwienie użytkownikom bezpośredniego łączenia się z Twoimi zasobami, uniemożliwiając im korzystanie z nich przez innych użytkowników. Użytkownicy, którzy wysyłają nagłówki referer, nie są twoimi przeciwnikami, ludzie, którzy są połączeni z twoimi obrazami, i nie mają kontroli nad przeglądarkami innych użytkowników. 2) Jestem prawie pewien, że Roosevelt i Churchill nie używali dysków, ponieważ nie zostali wymyśleni przez 30 lat po zakończeniu II wojny światowej. 3) To, o czym mówisz, to One Time Pads i zupełnie nie ma znaczenia dla pytanie na wyciągnięcie ręki. 4) Nie wynajduj własnego krypto. Po prostu nie rób tego. –

+0

Zwrócono moją uwagę, że prawdopodobnie mówiliście o płytach winylowych, kiedy mówiliście "płyty", co jest dokładne. W dalszym ciągu nie ma to jednak większego znaczenia dla problemu PO. –

0

Prostsza wersja eseju geek, zbuduj moduł obsługi w wyszukiwarce Google, aby pobrać i przesłać obrazy. Możesz modyfikować swoje nagłówki, aby określić png lub cokolwiek innego, ale zwracasz obraz z innej lokalizacji. Następnie możesz przejrzeć informacje o stronie odsyłającej żądania w module obsługi i podjąć odpowiednie działania, jeśli ktoś próbuje uzyskać dostęp do tego obrazu "hotlinked". Oczywiście, ponieważ nigdy nie wystawiasz rzeczywistego obrazu, niemożliwe byłoby hotlinkowanie. =)

+1

Czy pobrać i zwrócić obraz z usługi innej firmy przy każdej odpowiedzi? Oczywiście, jeśli kochasz rachunki o dużej przepustowości, zrób to. –

+0

Sugerowałem blobstore silnika aplikacji Google, ponieważ o ile wiem brak przechowywania obrazów statycznych poprzez wdrażanie aplikacji, jest to jedyny sposób, w jaki wiem o przechowywaniu tam zdjęć. Sądzę, że masz rację, że nie powiedziałem konkretnie blobstore, ponieważ to było częścią jego pytania ... –

+0

Wtedy tak naprawdę nie "zwracasz obrazu z innej lokalizacji", prawda? To właśnie doprowadziło mnie do przekonania, że ​​mówisz o ściągnięciu obrazu z innego miejsca. –