Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][PHP] Plik ma działać tylko gdy jest wczytany JSem
ArekJ
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
Mephistofeles
post
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.
Go to the top of the page
+Quote Post
cycofiasz
post
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
Go to the top of the page
+Quote Post
ArekJ
post
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)
Go to the top of the page
+Quote Post
cycofiasz
post
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
Go to the top of the page
+Quote Post
ArekJ
post
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!
Go to the top of the page
+Quote Post
Crozin
post
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?
Go to the top of the page
+Quote Post
Mephistofeles
post
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.
Go to the top of the page
+Quote Post
Crozin
post
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ą.
Go to the top of the page
+Quote Post
ArekJ
post
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.
Go to the top of the page
+Quote Post
melkorm
post
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.
Go to the top of the page
+Quote Post
Crozin
post
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:
1. Nagłówki.
2. Dane.
Ani żądanie, ani odpowiedź HTTP nie jest wysyłana w dwóch etapach - wszystko leci naraz.

Tak gwoli przypomnienia:
Kod
# Żądanie 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
No faktycznie, żądanie POST będzie o jeden bajt "cięższe" od GET.
Go to the top of the page
+Quote Post
melkorm
post
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
Go to the top of the page
+Quote Post
Crozin
post
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 Request


Następnym razem, przed podlinkowaniem sprawdź rzetelność autora.
Go to the top of the page
+Quote Post
melkorm
post
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ł.
Go to the top of the page
+Quote Post
Mephistofeles
post
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.
Go to the top of the page
+Quote Post
Crozin
post
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:
Kod
GET /blog/?name1=value1&name2=value2 HTTP/1.1
Host: carsonified.com
and in the body of POST requests:
Kod
POST /blog/ HTTP/1.1
Host: carsonified.com

name1=value1&name2=value2
Kolejny geniusz.

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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:30