![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 9 Dołączył: 21.05.2008 Skąd: Łomianki Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam taki problem, on w sumie szczególnego zagrożenia nie stwarza, jednak wolałbym tą możliwość wyeliminować. Otóż wczytuję wartość pliku /ajax/X.php za pomocą AJAXa. Tutaj wszystko działa jak należy itp, ale istnieje możliwość otworzenia pliku /ajax/X.php wpisując go w adresie przeglądarki. Chciałbym, aby plik mógł się wykonywać tylko w momencie, kiedy jest on wczytywany za pomocą AJAXa, da radę osiągnąć taki efekt? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź nagłówek X-Requested-With, większość bibliotek obsługujących AJAXa taki wysyła.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 711 Pomógł: 127 Dołączył: 5.07.2008 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Możesz użyć metody post zamiast get, wtedy ktoś będzie musiał trochę się nagimnastykować by uzyskać efekt.
Możesz także sprawdzać nagłówek Referer (czy zawiera nazwę twojej domeny). sprawdzania X-Requested-With nie polecam |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 9 Dołączył: 21.05.2008 Skąd: Łomianki Ostrzeżenie: (0%) ![]() ![]() |
Czyli jak dam Referer + post powinno być dobrze?
Bo w sumie post'a samego może podrobić, a referera i post'a to chyba już nie będzie się chciało w tak małej sprawie (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 711 Pomógł: 127 Dołączył: 5.07.2008 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
zapytanie post jest nieco wolniejsze niż get więc sam referer też chyba da radę i nie trzeba będzie przerabiać tyle kodu php
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 9 Dołączył: 21.05.2008 Skąd: Łomianki Ostrzeżenie: (0%) ![]() ![]() |
Przerabianie to akurat nie problem, bo i tak muszę to pooptymalizować czyli od nowa większość przepisać - bo kod jest dość stary.
Dzięki za pomoc! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
W skrócie: daruj sobie, bo jest to kompletnie bezcelowe i niemożliwe do zrealizowania. W dodatku ominięcie tych "zabezpieczeń" to minuta roboty.
Pod absolutnie żadnym pozorem nie korzystaj z nagłówka Referer - jest on zbyt mało "stabilny". Korzystanie z X-Requested-With jest jak najbardziej OK, ale jako forma zabezpieczenia? Śmieszne. Cytat zapytanie post jest nieco wolniejsze niż get Niby dlaczego?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Wiadomo, zabezpieczenie mało skuteczne, ale myślę, że tu chodzi bardziej o to, żeby zwykły użytkownik nie wszedł na stronę np. bez layoutu, czy nie dostał w odpowiedzi tylko JSONa, do tego w zupełności wystarczy taki nagłówek.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tylko jak miałby to zrobić? Musiałby przejrzeć kod/wysyłane żądania by ustalić, że chodzi o adres /ajax/doSth.php. No przecież nie wejdzie tak ot. A jak już będzie chciał to takie "zabezpieczenia" co najwyżej rozbawią.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 9 Dołączył: 21.05.2008 Skąd: Łomianki Ostrzeżenie: (0%) ![]() ![]() |
Czyli myślicie, że nie ma sensu? Bo zdażyły mi się przypadki, w których ludzie zwracają uwagę, że mogą bezpośrednio wejść na daną podstronę i wyświetla się ona bez lay'outu, wiem, że nie zagraża to bezpieczeństwu strony - to i tak jest tam sprawdzane, ale niszczy względy estetyczne.
Chociaż z drugiej strony nikt nikomu nie każe włazić w źródło strony i skakać po ładowanych stronach. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Niby dlaczego? Bo jest wykonywany w dwóch etapach: 1. Nagłówki. 2. Dane. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czyli myślicie, że nie ma sensu? Tak, jest to bez sensu.Cytat Bo zdażyły mi się przypadki, w których ludzie zwracają uwagę, że mogą bezpośrednio wejść na daną podstronę i wyświetla się ona bez lay'outu Ty umieszczasz na stronie jakieś linki typu <a href="/ajax/...">nie klikać!</a> czy może to informacje od ludzi, którzy patrzą jakie żądania wykonuje JS, wchodzą na jakiś "roboczy" URL i podniecają się tym, że udało im się bezpośrednio w przeglądarce zobaczyć dane, z których korzysta JS? Możesz im też podlinkować do /styles/main.css. Możesz im też powiedzieć, że jak sobie ręcznie usuną element HEAD (np. takim Fiebugiem) to strona się "posypie".Mam nadzieję, że teraz rozumiesz bezsensowność swoich działań. Cytat Bo jest wykonywany w dwóch etapach: Ani żądanie, ani odpowiedź HTTP nie jest wysyłana w dwóch etapach - wszystko leci naraz.1. Nagłówki. 2. Dane. Tak gwoli przypomnienia: Kod # Żądanie GET No faktycznie, żądanie POST będzie o jeden bajt "cięższe" od GET.
GET /blah/blah/blah.html?a=b&c=d HTTP/1.1 Host: domain.com # Żądanie POST POST /blah/blah/blah.html?a=b&c=d HTTP/1.1 Host: domain.com # Żądanie POST z dodatkowymi danymi POST /blah/blah/blah.html?a=b&c=d HTTP/1.1 Host: domain.com key1=val1&key2=val2&key3=val3 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Powyższe zalecenia nieco się zmieniają, jeśli tworzymy aplikację ajaksową. Wykorzystanie XMLHttpRequest sprawia, że przeglądarki przesyłają dane metodą POST w dwóch etapach – najpierw nagłówek, a później dane. Znacznie zmniejsza to responsywność ajaksowej aplikacji – czyli to, czego użytkownicy od niej wymagają. Dlatego w wypadku wykorzystania Ajaksa, jeśli nasze zapytanie nie przekracza 2048 znaków i nie zawiera w sobie danych, których nie mamy prawa przechowywać, zawsze korzystajmy z metody GET. Source |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wybacz, ale niestety autor podlinkowanego tekstu to idiota - wygląda na to, że nie ma pojęcia jak działa protokół HTTP.
A teraz dlaczego autor to idiota: Cytat O tym, że do czynienia mamy z metodą GET możemy się przekonać, jeśli w URI strony widzimy ciąg uporządkowanych par parametr=wartość (np. strona.php?kategoria=tshirty&strona=2). O metodzie (GET/POST/HEAD/PUT/DELETE/etc) informuje sam początek żądania - jest jawnie podane jaką metodę stosujemy. Fragment ?key=val&key=val&key=val to po prostu fragment URLa, tak jak /download/abc.7z.Cytat Dane przesłane tą metodą trafiają do tablicy $_GET. Metodą GET nie przesyłamy żadnych danych... przykro mi.Cytat Z metodą POST mamy do czynienia, gdy w URI nie widać żadnych parametrów. Kod <form action="do.php?action=save" method="post">... No popatrz... formularz wyśle mi metodą POST trochę danych, ale jakieś tam parametry są w URLu. Aaaa... te parametry nie mają nic wspólnego z metodą!Cytat Jako że użytkownik nie może podejrzeć przesłanych danych, tą metodą przesyłamy np. dane uwierzytelniające. Może.Cytat Wykorzystanie XMLHttpRequest sprawia, że przeglądarki przesyłają dane metodą POST w dwóch etapach – najpierw nagłówek, a później dane. Próba wysłania dwóch żądań - jednego z nagłówkami, drugiego z treścią - skończy się pięknym komunikatem: Error 400 Bad RequestNastępnym razem, przed podlinkowaniem sprawdź rzetelność autora. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Nie oceniałem jakości tego artykułu bo mówi sam za siebie.
Tutaj jest lepiej wyjaśnione I GET jest wydajniejszy. P.S. Trochę off-top się zrobił. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Tu nie chodzi o żądania, a o pakiety, które (podobno) lecą 2 we wszystkich przeglądarkach z wyjątkiem Firefoxa.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Note: Remember that query strings (i.e. name/value pairs) get transferred in the URL of GET requests: Kolejny geniusz.Kod GET /blog/?name1=value1&name2=value2 HTTP/1.1 and in the body of POST requests:Host: carsonified.com Kod POST /blog/ HTTP/1.1 Host: carsonified.com name1=value1&name2=value2 Udało się mi jednak znaleźć coś wartościowego: http://josephscott.org/archives/2009/08/xm...-for-http-post/ Rzeczywiście część przeglądarek podzieli żądanie POST na dwa pakiety TCP, prawdopodobnie celem optymalizacji przy dużych rozmiarach przesyłanych danych. Innymi słowy: w 99% przypadków kompletnie bez znaczenia, a zysk w pozostałych przypadkach będzie znikomy, wręcz pomijalny. Cytat I GET jest wydajniejszy. Nie, nie jest.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 17:30 |