Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Ajax] XSS XMLHttpRequest.open
cioop
post 27.07.2008, 17:23:58
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 24.01.2007

Ostrzeżenie: (0%)
-----


Witam,
staram sie zliczac klikniecia na swoich stronach osadzajac sam skrypt js.
Niestety mam problem z XMLHttpRequest.open, ktory mialby otwierac plik z innego serwera.
Kiedy wszystkie pliki sa pod ta sama domena, wszystko dziala. Problem pojawia sie miedzy domenami.
Jak go rozwiazac, zeby dzialalo jak google analytics? Czy w ogole sie da? Jak na razie udaje mi sie wywolac zdalna domene przy uzyciu curl w php, ale wtedy plik php musi sie i tak znajdowac pod ta sama domena co skrypt js, wiec to nie ma sensu.
Z gory dziekuje za pomysly
Go to the top of the page
+Quote Post
mrok
post 27.07.2008, 17:35:53
Post #2





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


jest takie male ograniczenie JS - nazywane "zasada identycznej domeny" - czy jakos tak. ogolnie przez js nie polaczysz sie z plikiem na innej domenie - wzgledy bezpieczenstwa.

Jak to robi google? dodaje na strone maly obrazek (1x1px) ktory pobierany jest z ich serwera. Do adresu obrazka doklejonych jest sporo danych - potem analizuja logi (dlatego min ich statystyki nie sa na biezaco)


--------------------
Go to the top of the page
+Quote Post
AjaxSrajax
post 27.07.2008, 19:36:37
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 22.03.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Hej,

Można przez JS połączyć się z innym plikiem stosując pewien trik, opisywany np. w książce Kuloodporny Ajax pana Jeremy Keith. Znacznik <script> pozwala na ściągnięcie pliczku tutaj już cytuję ww. pana:

Kod
<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"></script>


Cytat
@Jeremy Keith:
Funkcja jako argument przyjmuje adres URL. Tworzy nowy element script z podanym adresem URL jako atrybut src i dodaje go do elementu head dokumentu:


Kod
function getScript(url){
var scripttag=document.createElement("script");
scripttag.setAttribute("type", "text/javascript");
scripttag.setAttribute("src", url);
document.getElementsByTagName("head")[0].appendChild(scripttag);
}


Może Ci się to przyda, pozdrawiam smile.gif
Go to the top of the page
+Quote Post
cioop
post 27.07.2008, 22:45:27
Post #4





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 24.01.2007

Ostrzeżenie: (0%)
-----


nie bardzo rozumiem - czy poprzez wywolanie javascriptu w head'zie zyskuje sie mozliwosc laczenia XmlHttpRequest z inna domena?
Go to the top of the page
+Quote Post
AjaxSrajax
post 28.07.2008, 00:13:40
Post #5





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 22.03.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


XMLHttpRequest nie może łączyć się z inną domeną. To jest pewne. Znacznik script nie ma tych ograniczeń. Za pomocą DOM możesz`pobrać` plik bez przeładowania strony z innej domeny. Jednak musi być to plik JS- np. JSON. Można wygenerować taki plik za pomocą np. PHP. Jeśli nie jest to plik JS, pozostają chyba logi jak pisze kolega wyżej, ale nie bierz tego za pewnik. Niech wypowiedzą się inni:D
pozdrawiam smile.gif

Ten post edytował AjaxSrajax 28.07.2008, 00:17:25
Go to the top of the page
+Quote Post
cioop
post 28.07.2008, 19:10:06
Post #6





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 24.01.2007

Ostrzeżenie: (0%)
-----


Dzieki za podpowiedzi, probuje rozwiazania z obrazkiem.

W pliku html, tuz przed body umieszczam odwolanie do skryptu js. w js pobieram potrzebne mi informacje i po kliknieciu wywoluje obrazek:

  1. window.onload = init;
  2.  
  3. function init(){
  4. window.captureEvents(Event.MOUSEDOWN);
  5. window.onmousedown = params;
  6. }
  7.  
  8. function params() {
  9. url = http://adres.pliku.php + "?param1=" + wartosc + "&param2=" + wartosc;
  10. img = "<img style=\"display: none;\" src=\"" + url + "\" />";
  11. document.write(img);
  12. }


Teraz po kliknieciu, wartosci parametrow zapisuja mi sie do bazy, niestety strona zaczyna sie przeladowywac, wyswietla sie pusta, biala strona ... i laduje sie w nieskonczonosc - gdzie popelniam blad?

  1. <?php
  2. $image = imagecreate(1,1);
  3. header ( 'Content-Type: image/jpg' );
  4. imagejpeg ( $image );
  5. $db_connect=mysql_connect(db_host,db_login,db_pass) or die();
  6. @mysql_select_db(db_base,$db_connect) or die();
  7. $insert = "INSERT INTO table (param1, param2) VALUES('".$_GET['param1']."','".$_GET['param1']."')";
  8. $result=mysql_query($insert,$db_connect);
  9. if(!$result){exit(mysql_error($db_connect));}
  10. ImageDestroy($image);
  11.  
  12.  
  13. $href = 'http://adres.pliku.html';
  14.  
  15. //powyzej probuje wpisac adres strony, z ktorej wywolany jest .js,
  16. //ale przekierowanie dziala tylko,
  17. //jesli od razu w przegladarce wpisze sie adres pliku php
  18. //i nie jest to rozwiazanie jakiego szukam
  19.  
  20. header('Content-type: text/html; charset=utf-8');
  21. header('Location:'.$href);
  22.  
  23. exit();
  24. ?>


Jak napisalem wartosci parametrow zapisuja mi sie do bazy poprawnie, wiec problem pojawia sie pewnie dlatego, ze mi czegos brakuje w pliku php, po zapisaniu do bazy. Chcialbym, zeby parametry zapisywaly sie do bazy, ale zeby plik html sie nie przeladowywal - jak to zrobic? Z gory dziekuje za uwagi i pozdrawiam.

Ten post edytował cioop 28.07.2008, 19:11:06
Go to the top of the page
+Quote Post
mrok
post 28.07.2008, 19:46:14
Post #7





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


przeladowuje sie dlatego
  1. <?php
  2. header('Location:'.$href);
  3. ?>

tylko to nie tlumaczy dlaczego strona jest pusta ;(

swoja droga w ciekawy sposob rozwiazania tego problemu winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
cioop
post 28.07.2008, 20:56:34
Post #8





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 24.01.2007

Ostrzeżenie: (0%)
-----


bez headera tez sie przeladowuje i wyswietla pusta strone

sposob ciekawy czy nie, wazne zeby byl skuteczny - probowalem tez dynamicznie tworzyc i wysylac formularz, a takze wywolywac iframe, ale skoro google uzywa obrazka, to moze taki sposob jest najlepszy!?

Ten post edytował cioop 28.07.2008, 20:58:44
Go to the top of the page
+Quote Post
mrok
post 28.07.2008, 22:23:43
Post #9





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

Ostrzeżenie: (0%)
-----


faktycznie poprzednie odpowiedz jest trochę mało przemyślana winksmiley.jpg

sprobuj zrobić coś takiego, że na stronce wstawiasz sobie
  1. <div id="cos"></div>

a zamiast
  1. document.write(img);

uzyj
  1. document.getElementById('cos').innerHTML = img;


standardowy text
Cytat
u mnie działa winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
cioop
post 28.07.2008, 22:35:07
Post #10





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 24.01.2007

Ostrzeżenie: (0%)
-----


dzieki, dziala! opakowalem skrypt divem z id i pozniej w skrypcie wstawiam do tego diva obrazek poprzez innerHtml.
Go to the top of the page
+Quote Post
wujek.staszek
post 16.08.2008, 16:15:01
Post #11





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.08.2008

Ostrzeżenie: (0%)
-----


Witam. Pisze strone, ktora sciaga wskazany plik xml i parsuje go do htmla. Idealnie nadaje sie do tego AJAX. Jednak mam ten sam problem, bo sciagane pliki sa z innych serwerow ;] Moze jest mozliwe skonfigurowanie serwera zeby to on sciagal zewnetrzne pliki i odsylal je jako wlasne??
W php jest funkcja file_get_contents(), ktora laduje podany plik do zmiennej i moze ona wczytywac zewnetrzny plik JESLI w php.ini jest ustawiona linia allow_url_fopen On.
Wolalbym jednak trzymac sie AJAXa, poniewaz parsowanie xmla jest w nim wbudowane. Prosze o pomoc, pozdrawiam.
Go to the top of the page
+Quote Post
paziek
post 16.08.2008, 16:49:12
Post #12





Grupa: Zarejestrowani
Postów: 207
Pomógł: 25
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Nie da się. Było w FF3 przez jakiś czas (podczas bety (alfy?) ) ale wyłączyli.
Może wróci przy FF3.1
Nie wiem jak reszta przeglądarek - zdaje się, że IE8 ma/będzie_miało coś takiego, ale wg ich własnego projektu (jak zwykle).
ALE! Specyfikacja (jeśli tak to można nazwać) od W3C mówi, że aby pobrać dane z obcej domeny za pomocą AJAXa, ta domena (serwer w sumie) musi zezwolić na taką akcję. W tej chwili podobnie jest np. przy flashu. Także, jeśli nie kontrolujesz tych serwerów, a właściciel nie udostępni ich zawartości dla AJAXa z obcych domen, to zapomnij w ogóle o AJAXie i rób to po stronie serwera.

Możesz to zrobić przy pomocy Flasha lub JSON'a - jeśli upierasz się aby było po stronie klienta... tyle, że JSON wymaga aby dane były w innym formacie, niż XML, a Flash wymaga 'pozwolenia' od serwera, aby pobrać dane.


PHP ma wbudowane parsowanie XMLa (klasa DOM oraz kilka innych), a allow_url_fopen możesz obejść za pomocą curl'a.
Do tego nic go nie obchodzą jakieś pozwolenia, formaty itp.
Google! smile.gif
Go to the top of the page
+Quote Post
wujek.staszek
post 17.08.2008, 16:36:36
Post #13





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 16.08.2008

Ostrzeżenie: (0%)
-----


Mam przebiegly plan ;] Mozna wyslac zapytanie httpRequest o strone posrednik.php?link=link_do_strony_xml. Posrednik.php wyglada tak
  1. <?php
  2.  $link = $_GET['link'];
  3. ?>

Posrednik.php znajduje sie w tej samej domenie wiec httpRequest z ajaxa bedzie dzialac. Jednak dalej na serwerze musi byc allow_url_fopen On. Jak mozna to obejsc za pomoca curla? W php jestem zupelnie zielony.

Ten post edytował wujek.staszek 17.08.2008, 17:06:55
Go to the top of the page
+Quote Post
paziek
post 18.08.2008, 10:30:28
Post #14





Grupa: Zarejestrowani
Postów: 207
Pomógł: 25
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $url = 'http://www.example.com/file.xml';
  3.  
  4. $curl = curl_init();
  5.  
  6. curl_setopt($curl, CURLOPT_URL, $url);
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  8. curl_setopt($curl, CURLOPT_HEADER, false);
  9.  
  10. $str = curl_exec($curl);
  11.  
  12. curl_close($curl);
  13.  
  14. var_dump($str);
  15. ?>


To powinno zadziałać
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 09:40