Προς το περιεχόμενο

Javascript - Ajax


Uberalles_gr

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους,

 

το ερώτημα μου είναι το εξής :

 

θέλω να χρησιμοποιήσω AJAX (όπου θα χτυπάω μία σελίδα php) αλλά θέλω με κάποιο τρόπο (ΜΕ ΟΠΟΙΟΔΗΠΟΤΕ ΤΡΟΠΟ) να μην φαίνεται τι χτύπησα, να μην μπορεί να δει ο χρήστης ποια σελίδα χτύπησα, να μην μπορεί να το δει ΜΕ ΚΑΝΕΝΑΝ ΤΡΟΠΟ.

Δημοσ.

κάτι τέτοιο είναι αδύνατο γιατί μπορώ απλά να δω το http request...

Δημοσ.
Καλησπέρα σε όλους,

 

το ερώτημα μου είναι το εξής :

 

θέλω να χρησιμοποιήσω AJAX (όπου θα χτυπάω μία σελίδα php) αλλά θέλω με κάποιο τρόπο (ΜΕ ΟΠΟΙΟΔΗΠΟΤΕ ΤΡΟΠΟ) να μην φαίνεται τι χτύπησα, να μην μπορεί να δει ο χρήστης ποια σελίδα χτύπησα, να μην μπορεί να το δει ΜΕ ΚΑΝΕΝΑΝ ΤΡΟΠΟ.

uberalles μπορείς να γίνεις λίγο πιο κατανοητός; Τι εννοείς «χτυπάω μια σελίδα»; Που την χτυπάς; Γράφεις μια διεύθυνση στο πεδίο διευθύνσεων; Γράφεις μια διεύθυνση σε κάποιο πεδίο φόρμας; Κάτι άλλο;

 

Αν το ερώτημα σου ειναι πως θα αποκρύψεις τη διεύθυνση που γίνεται το request απο την ajax η απάντηση είναι δεν γινεται (βλ sfg). Αν είναι άκρως απαραίτητο, τότε μπορείς να φτιάξεις ένα script, να το βάλεις στον server και αυτό το script να κάνει το πραγματικό request. Πολύ μπέρδεμα. Σχεδιαστικά:

 

Σελίδα χρήστη < - > server 1 <- > server 2

 

όπου server 2 ειναι ο server που θες να αποκρύψεις

Δημοσ.

Ακριβώς αυτό θέλω να κάνω, δηλαδή να αποκρύψω την διεύθυνση που γίνεται το request απο την ajax...

 

Είναι άκρως απαραίτητο.

 

Δηλαδή εσύ αυτό που μου προτείνεις isay είναι να κάνω το request μου (μέσω AJAX) στον server 1, όπου ουσιαστικά η σελίδα που θα χτυπάω (php) θα κάνει νέο http request στον server 2 όπου θα μου επιστρέφει αυτό που θέλω στον server 1 και στην συνέχεια ο server 1 θα το μεταφέρει στον χρήστη.. Σωστά?

Δεν καταλαβαίνω όμως τι κερδίζω με αυτό τον τρόπο..

 

Το θέμα όμως είναι ότι εγώ δεν θέλω να φαίνεται το http request μου γιατί μπορεί κάποιος να πάρει αυτό που χτυπάω και να ξεκινήσει να το χτυπάει για πάρτυ του και π.χ. να μου παίρνει τα δεδομένα ΚΑΤΙ ΠΟΥ ΕΓΩ ΔΕΝ ΘΕΛΩ.

 

Για αυτό έλεγα με τι τρόπο γίνεται να μην φαίνεται..

Δημοσ.

μπορείς να πεις στην php σελίδα σου(server2) να απαντάει μόνο αν το request προέρχεται από μια συγκεκριμένη IP (την IP του proxy σου (server1) - αν υποθέσουμε ότι ακολουθείς την προσέγγιση του isay)

Δημοσ.

Μα το θέμα είναι ότι ο άλλος θα δει το 1ο μου request στον server 1 και θα πάει να το χτυπήσει το url και αυτός και θα παίξει κανονικά..

 

Δεν καταλαβαίνω αυτό που λέτε

Δημοσ.
Μα το θέμα είναι ότι ο άλλος θα δει το 1ο μου request στον server 1 και θα πάει να το χτυπήσει το url και αυτός και θα παίξει κανονικά..

 

Δεν καταλαβαίνω αυτό που λέτε

Σε συνέχεια αυτού που λεει ο sfd

Η σελίδα που θα βλέπει ο χρήστης θα φιλοξενείται σε κάποιο server; Αν ναι, μπορείς να φτιάξεις το script στον server1 να ελέγχει από που γίνεται το request και για επιπρόσθετη ασφάλεια να βάλεις και κάποιο image verification (γράψτε τον τάδε αριθμό).

Δημοσ.

Μα πως γίνεται να ελέγχω από που ήρθε το χτύπημα στο script μου που θα βρίκσεται στον server 1?? Νομίζω δεν γίνεται να το τσεκάρω αυτό όταν έχω χτύπημα με HTTP REQUEST

Δημοσ.

uberalles ακόμα δεν έχω καταλάβει τι εννοείς "χτύπημα http request".

Μπορείς να γίνεις πιο αναλυτικός για το project που προσπαθείς να φτιάξεις; Οι σωστές απαντήσεις ερχονται μετά απο σωστές ερωτήσεις

Δημοσ.

Έχω μία PHP σελίδα την index.php

 

Μέσα στην index.php υπάρχει ένα κουμπί.

Όταν το πατάω μέσω AJAX με HTTP REQUEST "χτυπάω" , / "φωνάζω" (πες το όπως θες) την σελίδα give_data.php

 

H give_data.php κάνει ότι κάνει και μου γυρνάει κάποια δεδομέδα τα οποία τα εμφανίζω στην index.php

 

Και το ερώτημα μου είναι πως γίνεται να μην μπορεί κάποιος να δει τι "φωνάζω" / "χτυπάω" εγώ με σκοπό να μην μπορεί να παίρνει τα δεδομένα που πάιρνω και εγώ...

 

Δεν μπορώ να το περιγράψω πιο απλά...

Δημοσ.

 

 

Έχω μία PHP σελίδα την index.php

 

Μέσα στην index.php υπάρχει ένα κουμπί.

Όταν το πατάω μέσω AJAX με HTTP REQUEST "χτυπάω" , / "φωνάζω" (πες το όπως θες) την σελίδα give_data.php

 

H give_data.php κάνει ότι κάνει και μου γυρνάει κάποια δεδομέδα τα οποία τα εμφανίζω στην index.php

 

Και το ερώτημα μου είναι πως γίνεται να μην μπορεί κάποιος να δει τι "φωνάζω" / "χτυπάω" εγώ με σκοπό να μην μπορεί να παίρνει τα δεδομένα που πάιρνω και εγώ...

 

Δεν μπορώ να το περιγράψω πιο απλά...

 

 

αυτή ηταν πολύ καλύτερη περιγραφή

 

Παρακάτω ένα παράδειγμα για να δεις πως θα ελέγχεις απο που έγινε το request και αν το επιτρέπεις ή όχι. Το παράδειγμα είναι τροποποιημένο παράδειγμα ajax από το w3schools (πάντα πρέπει να αναφέρεται η πηγή)

 

Έστω ότι έχεις τις σελίδες j1.htm και j2.php, όπου στην j1.htm γράφεις κάποιο γράμμα (π.χ. a ή e), γίνεται κλήση (όχι φωνάζεις ούτε χτυπάς) της j2.php και επιστρέφει κάποια δεδομένα, τα οποία εμφανίζονται στην j1.htm. Με προβολή του πηγαίου κώδικα της j1.htm μπορείς να δεις που γίνεται η κλήση (στην j2.php).

 

Στην j2.php έχουμε βάλει μια ρουτίνα ελέγχου αν η κλήση έχει γίνει από τον server και την ιστοσελίδα σου (π.χ. http://www.uberalles.gr/j1.htm ) και αν είναι αληθές, προχωρά στην επιστροφή σωστών στοιχείων, αλλιώς επιστρέφει ένα WRONG DATA.

 

Βάλε τις παρακάτω σελίδες (με τα ονόματα όπως είναι) σε κάποιο δικό σου server και δες πως λειτουργούν. Στην αρχή της σελίδας j2.php να διορθώσεις τη μεταβλητή $sostipigi

 

j1.htm

>
<html>
<head>
<script type="text/javascript">
function showHint(str)
{
if (str.length==0)
 { 
 document.getElementById("txtHint").innerHTML="";
 return;
 }
if (window.XMLHttpRequest)
 {// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
 }
else
 {// code for IE6, IE5
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
xmlhttp.onreadystatechange=function()
 {
 if (xmlhttp.readyState==4 && xmlhttp.status==200)
   {
   document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
   }
 }
xmlhttp.open("GET","j2.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<h3>Start typing a name in the input field below:</h3>
<form action=""> 
First name: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>Suggestions: <span id="txtHint"></span></p> 

</body>
</html>

 

j2.php

>
<?php

//edo grapse tin pliri dieu8insi pou trexei i j1.php
// p.x. $sostipigi='http://www.uberalles.gr/j1.php
$sostipigi='http://www.uberalles.gr/j1.htm';

if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']==$sostipigi) 
{

// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";

//get the q parameter from URL
$q=$_GET["q"];

//lookup all hints from array if length of q>0
if (strlen($q) > 0)
 {
 $hint="";
 for($i=0; $i<count($a); $i++)
   {
   if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
     {
     if ($hint=="")
       {
       $hint=$a[$i];
       }
     else
       {
       $hint=$hint." , ".$a[$i];
       }
     }
   }
 }

// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == "")
 {
 $response="no suggestion";
 }
else
 {
 $response=$hint;
 }

//output the response
echo $response;
} else {
echo "WRONG DATA! Try again";
}
?>

 

 

Στην περίπτωση σου, πρέπει να φτιάξεις τον κώδικα, ώστε από την σελίδα j2.php να καλέσεις την get_data.php (ή οτιδήποτε άλλο θες) και να τραβήξεις τα δεδομένα, τα οποία στο τέλος θα απεικονιστούν στην j1.htm

 

Με αυτό τον τρόπο, ο απλός επισκέπτης μπορεί να δει ότι καλείς την j2.php αλλά δεν μπορεί να δει απο που πραγματικά ερχονται τα data.

 

Σημειωση: Το HTTP_REFERER δεν είναι από τις πιο ασφαλείς μεθόδους και ο έμπειρος προγραμματιστής μπορεί να το ξεγελάσει.

Δημοσ.

Τώρα δημιουργείτε ένα νέο πρόβλημα και είναι το εξής:

 

Έστω κάποιος "ανταγωνιστής", βάλει 2-3 μηχανάκια να μου χτυπάνε όλη την ώρα το URL που κάνω τπ HTTP REQUEST..

Το αποτέλεσμα θα είναι να μου τον γονατίσουν τον server..

 

Έτσι ένας ακόμα λόγος να μην φαίνεται ποια σελίδα καλώ..

 

Π.χ. εάν το υλοποιούσα με flash δεν μπορείς να δεις ποιες σελίδες καλώ..

Δημοσ.

Π.χ. εάν το υλοποιούσα με flash δεν μπορείς να δεις ποιες σελίδες καλώ..

 

flash decompiler είναι η μαγική λέξη...

google it...

Δημοσ.
...

Π.χ. εάν το υλοποιούσα με flash δεν μπορείς να δεις ποιες σελίδες καλώ..

Νομίζεις. Με ένα απλό sniffer μπορώ να δω ΠΟΥ κάνεις request. Στο έχει αναφέρει ο sgf απο την αρχή.

 

 

Τώρα δημιουργείτε ένα νέο πρόβλημα και είναι το εξής:

Έστω κάποιος "ανταγωνιστής", βάλει 2-3 μηχανάκια να μου χτυπάνε όλη την ώρα το URL που κάνω τπ HTTP REQUEST..

Το αποτέλεσμα θα είναι να μου τον γονατίσουν τον server..

...

Αυτό λέγεται DOS attack και μπορεί να στο κάνει και στην κανονική σου σελίδα. Δεν είναι τόσο απλό ούτε να το κάνεις, ούτε να το αντιμετωπίσεις (αν και η αντιμετώπιση είναι πιο εύκολη). Άμα θες να προστατέψεις την get_data από DOS attack μπορείς να την βάλεις σε αλλο server

 

 

...

Έτσι ένας ακόμα λόγος να μην φαίνεται ποια σελίδα καλώ..

...

Με τον τρόπο που σου υπέδειξα (υπάρχουν και άλλοι τρόποι) μπορείς να αποκρύψεις την πραγματική get_data διεύθυνση αλλά νομίζω ότι δεν το έχεις καταλάβει.

 

 

SERVER A -> j1.htm που να καλεί

SERVER Α -> j2.php που να καλεί

SERVER B -> get_data.php που να επιστρέφει τα δεδομένα στην j2.php

 

Με αυτό τον τρόπο ο αναγωνιστής/επισκέπτης βλέπει ΜΟΝΟ τις j1 και j2 αλλά δεν ξέρει και δεν μπορεί να δει ΠΟΥ και ΠΟΙΑ ειναι η get_data. DOS attacks μπορούν να γίνουν στον server A αλλά όχι στον server B

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...