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.
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. –
@sharth: Dobrze. Właśnie przeszukaliśmy, w Googlebocie nie ma strony odsyłającej. Tylko jeden agent: Googlebot-Image/1.0. – DocWiki
Czy udało ci się zapobiec tworzeniu linków? Twoje zdrowie. – vtortola