Φωτογραφία Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ
POST σε web server
από Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ - Sunday, 21 February 2010, 2:24 PM
 
καλησπέρα,

αν έχω φτιάξει μια φόρμα και θέλω να στείλω τα αποτελέσματά της σε κάποιο αρχείο σε server, στην εντολή : <form action="exercise_6_2_search.php" method="POST">

πώς πρέπει να γραφτεί σωστά η διεύθυνση του target αρχείου?

ας υποθέσουμε ότι το αρχείο με την φόρα  μας βρίσκεται στην τοποθεσία  /public_html
και το target αρχείο επισης και έχει όνομα target.php.

Πρέπει να βρίσκονται στον ίδιο server? μπορώ να στείλω πληροφορίες σε ένα άλλο αρχείο σε κάποιον άλλο server ?συμβαίνει κάτι τέτοιο γενικά και που/πως χρησιμοποιείται μια τέτοια τεχνική?
 
Φωτογραφία Τάσος Μαυρίδης
Απάντηση: POST σε web server
από Τάσος Μαυρίδης - Sunday, 21 February 2010, 4:20 PM
 

Για τη διεύθυνση του target υπάρχουν δύο τρόποι 1.χρησιμοποιώντας το relative url του target αρχείου και 2. χρησιμοποιώντας το absolute url

 

1.με το relative url

Αρχίζεις από τον κατάλογο που είναι η φόρμα και πρέπει να γράψεις το url σε σχέση με αυτό τον κατάλογο. Αν θέλεις να μπεις σε folder βάζεις το όνομα του folder και αν θέλεις να πας ένα folder πάνω βάζεις ../

 π.χ.

Αν έχεις τη φόρμα και το target αρχείο στον ίδιο κατάλογο

<form action="target.php" method="POST">

 

Αν το target βρίσκεται σε ένα κατάλογο (π.χ. με όνομα my_folder) που βρίσκεται μέσα στον κατάλογο που περιέχει τη φόρμα

<form action="my_folder/target.php" method="POST">

 

Αν το target βρίσκεται ένα κατάλογο πάνω από τον κατάλογο που περιέχει τη φόρμα

<form action="../target.php" method="POST">

 

2. με το absolute url.

Βάζεις το πλήρες url για το target αρχείο.

π.χ.

<form action="http://www.my_site.com/my_folder/target.php" method="POST">Συνηθίζεται να χρησιμοποιούνται τα relative urls παντού για να μπορείς να μεταφέρεις εύκολα το site σε ένα άλλο server χωρίς να αλλάζεις όλα τα url. (π.χ. αν το μεταφέρεις από το τοπικό development server στον production server)

 

Δεν υπάρχει περιορισμός να βρίσκεται η φόρμα και το target στον ίδιο server. Ο οποιοσδήποτε μπορεί να κάνει μια δική του φόρμα από οπουδήποτε θέλει ώστε να στείλει δεδομένα στο target.php χωρίς να χρησιμοποιήσει τη δική σου φόρμα. Απλά χρησιμοποιεί το absolute url του target.php. Αυτό λέγεται form spoofing και είναι μια από τις πιο απλές μορφές επιθέσεων.

Χρησιμοποιείται από κάποιον που θέλει να παρακάμψει το client side (javascript) validation των πεδίων της φόρμας. Γι αυτό το validation με javascript δεν είναι ιδιαίτερα ασφαλές και πάντοτε πρέπει να γίνεται και server side validation με php. 

Φωτογραφία Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ
Απάντηση: POST σε web server
από Κωνσταντίνος ΜΑΥΡΟΚΕΦΑΛΟΣ - Sunday, 21 February 2010, 5:00 PM
 
καλησπέρα,

και το server side validation εν ολίγοις τί είναι και πως περίπου υλοποιείται. ποια είναι δηλαδή η φιλοσοφία του.

ευχαριστώ
Φωτογραφία Τάσος Μαυρίδης
Απάντηση: POST σε web server
από Τάσος Μαυρίδης - Sunday, 21 February 2010, 6:12 PM
 

Είναι λίγο μεγάλο θέμα.

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

Αυτό το υλοποιείς με php και εξαρτάται από το πώς έχεις υλοποιήσει την εφαρμογή σου.

 

Π.χ. ας υποθέσουμε ότι η εφαρμογή που έχετε κάνει στην άσκηση δε δουλεύει σωστά αν κάποιος χρήστης εισάγει μια εγγραφή με κενό όνομα και επίθετο. Πρέπει πριν κάνεις το Insert στη βάση να επιβεβαιώσεις ότι ο χρήστης έχει δώσει και τα τρία πεδία και δεν είναι κενά.

Αν είχες ένα πεδίο "έτος γέννησης" θα έπρεπε να επιβεβαιώσεις ότι η τιμή που έχει δώσει ο χρήστης είναι αριθμός.

 

Επίσης για την ασφάλεια της εφαρμογής πρέπει να βεβαιώσεις ότι ο χρήστης δεν μπορεί να εισάγει κάποιο javascript κώδικα, sql ερωτήματα , εντολές προς το σύστημα ή οτιδήποτε άλλο μπορεί να βλάψει το server ή την εφαρμογή.

 

Όπου μπορείς να το κάνεις , το κάνεις με php. Έτοιμες συναρτήσεις που χρησιμεύουν για τα βασικά είναι

http://php.net/manual/en/book.ctype.php

http://gr.php.net/manual/en/filter.filters.validate.php

http://gr.php.net/manual/en/function.mysql-real-escape-string.php

 

Κάποια απλά παραδείγματα

http://gr.php.net/manual/en/filter.examples.validation.php