poscore Δημοσ. 25 Μαΐου 2012 Δημοσ. 25 Μαΐου 2012 Καλησπέρα, είπα να γράψω και εδώ μπας και υπάρχει κάποιος που γνωρίζει και είναι πρόθυμος να βοηθήσει. Υπάρχει μια σελίδα που χρησιμοποιεί HTTPS και εμφανίζει μια φόρμα login. Μετά απο αυτό δλδ μόλις συμπληρώσω τα στοιχεία μου εμφανίζονται ας πούμε κάποια πράγματα που τα θέλω. Θέλω να κάνω ένα πρόγραμμα σε php που θα παίρνει αυτά τα δεδομένα και θα μου τα επιστρέφει. Ίσως τα αποθηκεύει σε κάποιο string κτλ. Μπορεί να μου πεί κάποιος τι θα χρησιμοποιήσω σε γενικές γραμμές? Γνωρίζω προγραμματισμό (ΟΧΙ τέλεια) οπότε απλά θα ήθελα μια αναφορά(σχεδιάγραμμα). ευχαριστώ πολύ για κάθε βοήθεια. Φιλικά... για να προλάβω άτομα, μην αρχίσετε και λέτε για cracking κακόβουλα προγράμματα και τέτοια. Μια απλή εφαρμογή θέλω να κάνω και όποιος θέλει μπορει να βοηθήσει.
PeLLaRaS Δημοσ. 25 Μαΐου 2012 Δημοσ. 25 Μαΐου 2012 Συμπτωματικά δουλεύω σε κάτι αντίστοιχο, για να αυτοματοποιήσω μια διαδικασία. Μια λύση είναι η χρήση της βιβλιοθήκης cURL που την βρίσκεις και στην php Θα πρέπει να την εγκαταστήσεις, αν δεν υπάρχει ήδη στον server που θα τρέχει το script. Αυτό που σε νοιάζει όσο αφορά το HTTPS είναι οι παράμετροι CURLOPT_SSL_VERIFYPEER και CURLOPT_SSL_VERIFYHOST να είναι στο false για να επιτραπεί η σύνδεση. Για να "στείλεις" τα στοιχεία εισόδου σου (username, password) θα χρειαστείς να ρυθμίσεις τις παραμέτρους CURLOPT_POST και CURLOPT_POSTFIELDS. Επίσης θα χρειαστεί να αποθηκεύεις τα cookies σε κάποιο σημείο. Έχει αναλυτικά παραδείγματα στο manual της php (το λινκ από πάνω!)
poscore Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 (επεξεργασμένο) Σε ευχαριστώ για την απάντηση σου. Έχω ήδη υλοποιήσει κάτι και σε γενικές γραμμές είναι αυτά που ανέφερες. Οστώσο έχω προβλήματα. Θα ξεκινήσω απο την αρχή για να ξεκαθαριστούν! Η πρώτη απορία μου είναι σε ποιο λινκ θα κάνω curl? Σε αυτό που περιέχει την φόρμα η σε αυτό που βλέπω αφού κάνω Login κανονικά? Ελπίζω να έγινα σαφής. Για να το πάμε και λίγο πιο πρακτικά δίνω και έναν κώδικα > <?php // create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "λινκ που δείχνει την φόρμα"); curl_setopt($ch, CURLOPT_HEADER, false); CURL_SETOPT($ch, CURLOPT_SSL_VERIFYPEER, false); CURL_SETOPT($ch, CURLOPT_SSL_VERIFYHOST, false); CURL_SETOPT($ch, CURLOPT_POST, true); CURL_SETOPT($ch, CURLOPT_POSTFIELDS, 'userName=myusername&pwd=mypassword'); // grab URL and pass it to the browser curl_exec($ch); echo $ch; // close cURL resource, and free up system resources curl_close($ch); ?> Επεξ/σία 25 Μαΐου 2012 από poscore
PeLLaRaS Δημοσ. 25 Μαΐου 2012 Δημοσ. 25 Μαΐου 2012 Ουσιαστικά θα πρέπει να προσομοιώσεις όλη την διαδικασία. Θα δεις η φόρμα σε ποιο λινκ στέλνει τα στοιχεία εισόδου. Αυτό το λινκ θα ανοίξεις και με POST θα στείλεις τα username και password και ότι τυχών άλλο χρειάζεται. Στην συνέχεια θα φορτώσεις το λινκ στο όποιο περιέχει τις πληροφορίες που θέλεις να πάρεις. Στην καλύτερη περίπτωση, το λινκ στο οποίο στέλνει η φόρμα τα στοιχεία εισόδου σου είναι το ίδιο με το λινκ που περιέχει τις πληροφορίες που θες, τότε θα χρειαστεί να ανοίξεις μόνο ένα λινκ (το τελικό) και πιθανότατα δεν θα χρειαστεί να κρατήσεις cookies. Στην δική μου περίπτωση, πρέπει να ανοίκξω το αρχικό λινκ με την φόρμα, γιατί περιέχει κάποιο μοναδικό κωδικό για να μπορέσω να κάνω login. Αρά πρέπει να το "πάρω" πρώτα. Στην συνέχεια, αφού κάνω login (και άρα 2η εκτέλεση του curl) πρέπει να αποθηκεύσω cookies. Επίσης στην περίπτωση μου, με κάνει redirect κατά το login, οπόταν πρέπει να ρυθμίσω και τον curl να "ακολουθήσει" την διαδρομή μέχρι τέλους. Μετά από όοοολο αυτό πρέπει να φορτώσω άαααλλο λινκ με τα δεδομένα που θέλω. Φαντάζομαι για σένα θα είναι πιο απλό. (μαξ δυο λινκ θα φορτώσεις) Edit: Τώρα είδα τον κώδικα. Στο CURLOPT_URL θα βάλεις το λινκ που στέλνει η φόρμα, θα το βρεις από τον html κώδικα της σελίδας με την φόρμα Υ.Γ. για να μην σου εκτυπώσει το περιεχόμενο του curl στον browser, αλλά να το πάρεις σε μεταβλητή, θα πρέπει να ρυθμίσεις το CURLOPT_RETURNTRANSFER σε true.
poscore Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 Οκ thx για τις συμβουλές θα προσπαθήσω να συνεχίσω με την υλοποίηση και βλέπουμε. Πάντως δεν είναι τόσο απλό όσο το σκεφτόμουν και ειλικρινα σε ευχαριστώ φίλε μου Υπάρχει ένα προβληματάκι εδώ. Αυτό είναι το σημείο στο οποίο γίνεται Login. Απο ότι κατάλαβα γτ δεν έχω πάρει και πτυχίο σε HTML δεν χρησιμοποιείται <form> αλλα κάποιο table. Ο λόγος μου διαφεύγει...επίσης με μπερδεύει αφάνταστα γτ στο μυαλό μου είχα να βρώ την φόρμα που θα σε στέλνει σε κάποιο php αρχείο που θα κάνει authentication. :/ > <table border=0 class="tableborderColorOnly" CELLSPACING=0 CELLPADDING=0 style="width:100%"> <tr><td> <TABLE class="tableCell" WIDTH="100%" BORDER=0 CELLSPACING=0 CELLPADDING=5 align="center"> <tr> <td height="20" colspan=2 align="left" class="whiteheader"><b>Είσοδος Φοιτητή</b></td> </tr> <tr height="40" valign=bottom> <td width=120 align="right" nowrap valign="middle"><b>Όνομα χρήστη:</b></td> <td valign="middle" ><input id="userName" maxlength="15" name="userName" style="border: 1 solid #CCCCCC" size="20"></td> </tr> <tr> <td align="right" valign="middle"><b> Κωδικός πρόσβασης:</b></td> <td valign="middle"><input type="password" id=pwd name=pwd style="border: 1 solid #CCCCCC" size="20"></td> </tr> <TR height="50" valign="middle" > <TD align="right" colspan=2> <input type="submit" class="flatbtn" onclick="Submit()" value='Είσοδος' tabIndex=0 id=submit1 name=submit1> </TD> </TR> </TABLE> </td> </tr> </table> βασικά η αλήθεια είναι οτι καλείται κάποια ρουτίνα Submit() > function Submit() { document.getElementById("loginTrue").value="login"; } απλά εδώ χρειάζονται γνώσεις Javascript και δεν τις έχω. Απο εδώ και πέρα δεν ξέρω τι γίνεται edit: τελικά βλακεία μου, υπήρχε πολύ πιο πάνω μια φόρμα που οδηγεί σε ένα αρχείο login.asp. Οπότε έβαλα όλο το λινκ.
PeLLaRaS Δημοσ. 25 Μαΐου 2012 Δημοσ. 25 Μαΐου 2012 Από την στιγμή που υπάρχουν τα <input> tags, λογικά υπάρχει και η φόρμα. Ψάξε για <form name="κάτι" id="κάτι" action="λινκ"> (Μην κάνεις search για <form> αλλά για <form ) Την javascript άφησε την προς το παρών στην άκρη, ίσως να μην χρειάζεται να μπλέξεις με αυτήν ακόμη. Αν δεν βρεις το link από την φόρμα, δοκίμασε να βάλεις το λινκ στο οποίο καταλήγεις αμέσως μετά από το login. Αν δεν βρεις άκρη μέχρι εδώ, η επόμενη λύση είναι να παρακολουθήσεις τα HTTP request και να μάθεις από εκεί πως και που πάνε τα στοιχεία εισόδου σου. (στον firefox με extension το Live HTTP headers). Δυστυχώς εδώ μπλέκεις με ακόμη πιο τεχνικά θέματα, αλλά είναι τα μόνα "σίγουρα"
poscore Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 Έχω επεξεργαστεί το προηγούμενο. Τώρα είναι όλα Οκ φαντάζομαι. Ο παρών κώδικας, > <?php // create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "https://site/student/login.asp"); curl_setopt($ch, CURLOPT_HEADER, false); // pass over SSL connection CURL_SETOPT($ch, CURLOPT_SSL_VERIFYPEER, false); CURL_SETOPT($ch, CURLOPT_SSL_VERIFYHOST, false); // login with username and password CURL_SETOPT($ch, CURLOPT_POST, true); CURL_SETOPT($ch, CURLOPT_POSTFIELDS, 'userName=csuser&pwd=password'); CURL_SETOPT($ch, CURLOPT_RETURNTRANSFER, true); // grab URL and pass it to the browser curl_exec($ch); echo $ch; // close cURL resource, and free up system resources curl_close($ch); ?> και απενεργοποίησα και αυτό που είπες. :/ Μου εμφανίζει όμως ο browser: >"Resource id#2" και μάλλον δεν είναι καλό. Ξέρεις γιατί εμφανίζεται αυτό? :/ Είναι error απο κάποια συνάρτηση?
PeLLaRaS Δημοσ. 25 Μαΐου 2012 Δημοσ. 25 Μαΐου 2012 Λόγο του echo στο κάνει αυτό. Βασικά πρέπει να το τροποποιήσεις σε κάτι τέτοιο: >$httpsite = curl_exec($ch); //αφού όρισες να σου επιστρέφει το αποτέλεσμα και όχι να το εκτυπώνει echo $httpsite;
poscore Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 Ο κώδικας είναι αυτός: > <?php $access = curl_init(); curl_setopt($access, CURLOPT_URL, "page"); curl_setopt($access, CURLOPT_HEADER, false); /* επιβεβαίωση για το SSL */ curl_setopt($access, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($access, CURLOPT_SSL_VERIFYHOST, false); /* αποστολή στοιχείων για πρόσβαση στο url χρήστη*/ curl_setopt($access, CURLOPT_POST, true); curl_setopt($access, CURLOPT_POSTFIELDS, 'userName=xxxx&pwd=yyyy'); curl_setopt($access, CURLOPT_RETURNTRANSFER, true); curl_exec($access); /* άνοιγμα νεόυ session για τα δεδομένα */ $target = curl_init(); /* ρύθμιση νέας σύνδεσης */ curl_setopt($target, CURLOPT_URL, "page"); curl_setopt($target, CURLOPT_FOLLOWLOCATION, 0; curl_setopt($target, CURLOPT_HEADER, false); curl_setopt($target, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($target, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($target, CURLOPT_RETURNTRANSFER, false); $data = curl_exec($target); echo $data; curl_close($target); curl_close($access); ?> το πρόβλημα τώρα είναι ότι μου επιστρέφεται η σελίδα με το login :/ όταν κάνω 2ο curl δεν θα βάλω το url που έχω αφού γίνει login? :/
PeLLaRaS Δημοσ. 25 Μαΐου 2012 Δημοσ. 25 Μαΐου 2012 Από την στιγμή που καλείς δεύτερη φόρα τον curl για άλλο λινκ, πρέπει να κρατήσεις τα cookies για να "Θυμάται" ότι έκανες εσύ login! > <?php $access = curl_init(); curl_setopt($access, CURLOPT_URL, "page"); //link στο οποίο στέλνει τα δεδομένα η φόρμα του login curl_setopt($access, CURLOPT_HEADER, false); /* επιβεβαίωση για το SSL */ curl_setopt($access, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($access, CURLOPT_SSL_VERIFYHOST, false); /* αποστολή στοιχείων για πρόσβαση στο url χρήστη*/ curl_setopt($access, CURLOPT_POST, true); //του λες να στείλει με POST τα δεδομένα εισόδου curl_setopt($access, CURLOPT_POSTFIELDS, 'userName=xxxx&pwd=yyyy'); //τα δεδομένα εισόδου curl_setopt($access, CURLOPT_RETURNTRANSFER, true); //να σου επιστρέψει σε μεταβλητή την σελίδα. curl_setopt($access, CURLOPT_FOLLOWLOCATION, true); //να ακολουθήσει τα redirects curl_setopt($access, CURLOPT_AUTOREFERER, true); //αυτό το θες σε περίπτωση που ελέγχει η σελίδα από που έρχεσαι. curl_setopt($access, CURLOPT_COOKIEJAR, "cookie.txt"); //αρχείο στο οποίο αποθηκεύει τα cookies curl_setopt($access, CURLOPT_COOKIEFILE, "cookie.txt"); //αρχείο από το οποίο διαβάζει τα cookies (προφανώς το ίδιο) $httppage = curl_exec($access); echo $httppage; //εκτυπώνεις την σελίδα να δεις αν όντως πέτυχε το login curl_setopt($access, CURLOPT_URL, "page2"); //ρυθμίζεις το curl για το link που περιέχει της πληροφορίες που θες (δεν χρειάζεται να φτιάξεις νέο curl) curl_setopt($access, CURLOPT_POST, false); //απενεργοποιείς το POST αφού δεν στέλνεις δεδομένα τώρα $httppage2 = curl_exec($access); echo $httppage2; //εκτυπώνεις την σελίδα με τις πληροφορίες που θες, βλέπεις αν όντως πέτυχε curl_close($access); ?> Όπως βλέπεις είμαστε σε καλό δρόμο, μην απελπιστείς
poscore Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 >curl_setopt($access, CURLOPT_POST, true); //απενεργοποιείς το POST αφού δεν στέλνεις δεδομένα τώρα Μάλλον ήθελές να το ορίσεις false?
poscore Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 Την πρωτη φορά που επιστρέφεται η σελίδα του Login(δλδ βλέπω την φόρμα). αυτό σημαίνει οτι πεέτυχε? Θα έπρεπε να βλέπω την φόρμα η το redirect απο την φόρμα? Η δεύτερη σελίδα είναι πάλι αυτή η φόρμα. Εδώ προφανώς κάτι συμβάινει και δεν είναι η σωστή! :/ Κάποια σχόλια πάνω σε αυτά? τι μπορεί να συμβαίνει? Επίσης χρησιμοποιήσα αυτό το πρόσθετο του firefox. Δεν πολυκατάλαβα τι γίνεται. ΠΑΝΤΑ στέλνω ένα header και o server απαντά με header? Τι μπορώ να εξάγω απο εκεί? Σορρυ για τις πολλές ερωτήσεις αλλα προφανώς μαθαίνω πολλά απο τις γνώσεις και συμβουλές σου... HTTP headers: > http://localhost/poscore/init.php GET /poscore/init.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Referer: http://localhost/poscore/ Cache-Control: max-age=0 HTTP/1.1 200 OK Date: Fri, 25 May 2012 20:05:54 GMT Server: Apache/2.2.21 (Unix) DAV/2 mod_ssl/2.2.21 OpenSSL/1.0.0c PHP/5.3.8 mod_apreq2-20090110/2.7.1 mod_perl/2.0.5 Perl/v5.10.1 X-Powered-By: PHP/5.3.8 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html ---------------------------------------------------------- http://localhost/poscore/Unistudent.css GET /poscore/Unistudent.css HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0 Accept: text/css,*/*;q=0.1 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Referer: http://localhost/poscore/init.php Cache-Control: max-age=0 HTTP/1.1 404 Not Found Date: Fri, 25 May 2012 20:05:55 GMT Server: Apache/2.2.21 (Unix) DAV/2 mod_ssl/2.2.21 OpenSSL/1.0.0c PHP/5.3.8 mod_apreq2-20090110/2.7.1 mod_perl/2.0.5 Perl/v5.10.1 Vary: accept-language,accept-charset Accept-Ranges: bytes Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 Content-Language: en προφανώς δεν είναι όλα. Απλά βλέπω κάτι 404 Not Found και ήθελα να μάθω τι γίνεται :/ δεν βρίσκει τους συνδέσμους? ;/
PeLLaRaS Δημοσ. 26 Μαΐου 2012 Δημοσ. 26 Μαΐου 2012 Την πρώτη φορά θα έπρεπε να σου στέλνει την σελίδα που βλέπεις αμέσως μετά το login. Αφού και όταν ανοίγεις το δεύτερο λινκ, σου βγάζει την φόρμα για να συνδεθείς, τότε δεν έγινε σωστά το login Για τα HTTP headers. Ακριβώς όπως το είπες, στέλνεις εσύ ένα header και απαντά πίσω ο server με ένα άλλο. Σε αυτά που παρέθεσες, είναι η εναλλαγή με τον server που τρέχει το script σου Δεν θες αυτό εσύ! (Το 404 που παίρνεις από ότι βλέπω, είναι για το css που δεν υπάρχει στον υπολογιστή σου) Αυτό που θα κάνεις για να ξεμπερδεύεις με το HTTP headers είναι το εξής: Πας στην σελίδα που πρέπει να κάνεις login. Ανοίγεις το Live HTTP headers. Βάζεις τα στοιχεία σου στην φόρμα και κάνεις το login. Επιστρέφεις πίσω στο Live HTTP headers, και βλέπεις σε ποιο λινκ έστειλε ο firefox το username και κωδικό σου. Θα το καταλάβεις από το header που στέλνεις και έχει μέσα τα στοιχεία σου. Δες και τι άλλο στέλνει!! Αφού τα μαζέψεις, πήγαινε στο php script που έφτιαξες και τροποποίησε το ανάλογα. Συμβουλή πρώτα να παίξεις να δεις αν κάνει σωστό login και μετά φτιάχνεις την τελική σελίδα που θες να μαζέψεις τις πληροφορίες. Αν μετά από αυτό, δεν κάνει login με τον curl. Τότε μάλλον θα θέλει να ξεγελάσεις την σελίδα να πιστεύει πως τρέχεις από firefox, αλλά και το refer θα πρέπει να πλαστογραφήσεις (από ποια σελίδα έρχεσαι). Δεν είναι τίποτα δύσκολο, δυο επιπλέον παράμετροι στον curl και τις πληροφορίες τις παίρνεις από το Live HTTP headers. Δική μου τακτική συνήθως είναι να ανοίγω το Live HTTP headers, να κάνω στο firefox αυτό που θα ήθελε να αυτοματοποιήσω σε php, και προσομοιώνω τα headers ακριβώς όπως τα βλέπω. Υ.Γ. Πες μου μόνο ότι δεν έχει capcha το login...
poscore Δημοσ. 26 Μαΐου 2012 Μέλος Δημοσ. 26 Μαΐου 2012 δεν έχει capcha το Login και πάλι ευχαριστώ θα συνεχίσω την δουλειά
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα