הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [שאלה]בדיקה שטופס אכן נשלח מהאתר שלי (https://hosts.co.il/forums/showthread.php?t=70814)

dabi 04-01-09 11:09

[שאלה]בדיקה שטופס אכן נשלח מהאתר שלי
 
יש לי אתרעם שליחת טופס שלפי הטופס אני מעדכן ערכים במסד
הבנתי שיש אפשרות שגם מישהו יצור טופס סתם משרת אחר וזה ישלח לאתר שלי
איך אני מונע את זה
כי זה עלול ליצור בעיות

תודה

Grenade 04-01-09 11:18

תבדוק איזה עמוד הפנה אל העמוד שמעדכן בבסיס נתונים.
אם זה העמוד שלך תעדכן את הנתונים,
אם לא תחזיר אל העמוד של הטופס שלך.

Derey22 04-01-09 12:07

ציטוט:

נכתב במקור על ידי Grenade (פרסם 690659)
תבדוק איזה עמוד הפנה אל העמוד שמעדכן בבסיס נתונים.
אם זה העמוד שלך תעדכן את הנתונים,
אם לא תחזיר אל העמוד של הטופס שלך.

אפשר לזייף את זה אם אני לא טועה.

ציטוט:

נכתב במקור על ידי dabi (פרסם 690657)
יש לי אתרעם שליחת טופס שלפי הטופס אני מעדכן ערכים במסד
הבנתי שיש אפשרות שגם מישהו יצור טופס סתם משרת אחר וזה ישלח לאתר שלי
איך אני מונע את זה
כי זה עלול ליצור בעיות

תודה

אני זוכר דיון שלם על זה פה,בסוף גם נמצא פתרון אם אני זכור נכון.
בעזרת סישן.

vadimg88 04-01-09 13:02

דרך אחת היא לתת לכל אורח KEY כלשהו ולהוסיף אותו בטופס בתור שדה נסתר, ואז לבדוק את המפתח שהגיע מהטופס אם הוא תואם למפתח של המשתמש שכרגע שלח את זה.

dabi 04-01-09 13:11

שדה נסתר אפשר לראות ולזייף
אשמח לשמוע על הדרך עם הסישן
והאם היא מאובטחת ב 100 אחוז שלא יהיה אפשר לפרוץ
תודה רבה

vadimg88 04-01-09 17:09

בשדה הנסתר יהיה מפתח של הסשיין שבצד השרת צריך יהיה לאמת. אז גם אם משהו יערוך את השדה הנסתר והוא יגיע לשרת ערוך הוא לא יהיה תואם לסשיין שהוגדר לאותו שדה נסתר בהתחלה, ולכן לא יעבור את הבדיקה.

OrPol 04-01-09 18:18

אפשר לשלוח לעמוד הנוכחי ולהשתמש בreChapta בתור התנייה לכתיבת הנתונים למסד.

intercooler3819 04-01-09 23:11

אין קשר לRECAPTCHA
הוא מתכוון שיעשו לו SUBMIT לטופס מבחוץ.. סוג של X/CSRF

תעבוד עם TOKEN-ים
תחזיק איזה MD5 של משהו ייחודי בסשן, תזרוק אותו בטופס בתור ערך מוסתר ותשווה ביניהם בבדיקה

OrPol 05-01-09 10:06

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 690751)
אין קשר לRECAPTCHA
הוא מתכוון שיעשו לו SUBMIT לטופס מבחוץ.. סוג של X/CSRF

תעבוד עם TOKEN-ים
תחזיק איזה MD5 של משהו ייחודי בסשן, תזרוק אותו בטופס בתור ערך מוסתר ותשווה ביניהם בבדיקה

כאשר הטופס באותו עמוד של הכנסת הנתונים למסד, זה קשור בהחלט.
אתה מכניס את הRECHAPTA כתנאי להכנסת נתונים למסד,
כמו פה:
קוד:

                                                                                                          <?php
include("config.php") ;
include("dblib.php") ;
include("sessions.php") ;

require_once('recaptchalib.php');





$publickey = "****blabla*****";

$privatekey = "****blabla*****";


# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;

# was there a reCAPTCHA response?




$bool_is_login = false ;
if($session[user_id] > 0) {
        $bool_is_login = true ;
}
if(!$bool_is_login) {


        if($_POST['a'] == "register") {
                $userdata = $_POST['userdata'] ;
                $userdata[username] = htmlspecialchars(trim($userdata['username'])) ;
                $userdata[email] = htmlspecialchars(trim($userdata['email'])) ;
                $userdata[f_name] = htmlspecialchars(trim($userdata['f_name'])) ;
                $userdata[l_name] = htmlspecialchars(trim($userdata['l_name'])) ;
                $userdata[phone] = htmlspecialchars(trim($userdata['phone'])) ;

                $bool_register = false ;
                if(empty($userdata[username])) {
                        $message = "Username is empty" ;
                }elseif(is_username_exists($userdata[username])) {
                        $message = "Username is already exist" ;
                }elseif(empty($userdata[password])) {
                        $message = "Password is empty" ;
            }elseif(empty($userdata[address])) {
                        $message = "Address is empty" ;
                }elseif(empty($userdata[company])) {
                        $message = "Company name is empty" ;
                }elseif($userdata[password] != $userdata[c_password]) {
                        $message = "Passwords are not equal" ;
                }elseif(empty($userdata[email])){
                        $message = "E-Mail is empty" ;
                }elseif(!check_email_address($userdata[email])){
            $message = "E-Mail is not vaild." ;
                }elseif(empty($userdata[f_name])){
                        $message = "First name is empty" ;
                }elseif(empty($userdata[l_name])){
                        $message = "Last name is empty" ;
                }elseif(empty($userdata[phone])){
                        $message = "Phone number is empty" ;
                }elseif(empty($userdata[p_question])){
                        $message = "Hint for PIN is empty" ;
                }elseif(empty($userdata[p_answer])){
                        $message = "PIN is empty" ;
                }else{
                if ($_POST["recaptcha_response_field"]) {
        $resp = recaptcha_check_answer ($privatekey,
                                        $_SERVER["REMOTE_ADDR"],
                                        $_POST["recaptcha_challenge_field"],
                                        $_POST["recaptcha_response_field"]);

        if ($resp->is_valid) {

            $bool_register = true ;

            } else {

              $message = "Incorrect security code. <br/>Please try again." ;

                $error = $resp->error;
        }

}else{
$message = "Security code field is empty." ;
}

                }
                if($bool_register) {
                        $userdata[enc_password] = md5($userdata[password]) ;
                        $userdata[reg_time] = $userdata[last_time] = time() ;
                        $sql = "INSERT INTO users(username, password, reg_time, last_time, f_name, l_name, email, homepage, regas, address, company, p_question, p_answer) VALUES('{$userdata[username]}', '{$userdata[enc_password]}', '{$userdata[reg_time]}', '{$userdata[last_time]}', '{$userdata[f_name]}', '{$userdata[l_name]}', '{$userdata[email]}', '{$userdata[phone]}', 'Investor', '{$userdata[address]}', '{$userdata[company]}', '{$userdata[p_question]}', '{$userdata[p_answer]}')" ;
                        mysql_query($sql) ;
                        $userdata[user_id] = mysql_insert_id() ;

                        login($userdata[user_id]) ;
                        header("Location: http://www.your-page.com") ;
                        exit ;
                }
        }

}


והקוד שמתנה האם להציג טופס/הודעה אחרת:
קוד:

<?php



if($message) {
        ?><span style="color: red;"><?=$message?></span><?
}

if($session[user_id] > 0) {
?>
  <h2><span style="color: red;">You are already logged in.</span> </h2> <?php
}else{


if(!$bool_is_login) {
        show_register_form() ;
}else{
        show_other_message() ;
}


}
?>

כמובן שאלו רק כמה חלקים מהקוד המלא,
שכולל את כל הפונקציות כמו login וכו'...


תנסה לשלוח מבחוץ לטופס הזה...

vadimg88 05-01-09 11:59

אומנם reCAPTCHA אכן יעבוד כאן כי זה ערך רנדומלי שנוצר שדורש אימות, בידיוק כמו תמונה שתציג ערך אקראי שצריך להזין שבדרך כלל נועד נגד בוטים שיהיה יותר פשוט לשלב, וכן יעבוד בשני המקרים. עדיין שילוב של tokens יהיה יותר פשוט.


כל הזמנים הם GMT +2. הזמן כעת הוא 18:53.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ