ABA


"אני לא רוצה להשתחצן, אבל אפילו אלוהים לא יודע מה הבעיה"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #10039 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10039
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   07:09   17.02.11   
אל הפורום  
  אני לא רוצה להשתחצן, אבל אפילו אלוהים לא יודע מה הבעיה  
 
   נשבע לכם שזה אחד הדברים הכי מדכאים שיש.
מדובר ב-PHP.
בבקשה שמישהו יסביר לי מה הבעיה בקוד הבא.
סיפור רקע: אני בעצם רוצה לשלוף ידיעה מהמסד, ע"י משתנה GET מהכתובת.
בשביל זה בעצם אני מוציא בלולאה את כל ה-ID שמתאימים,
ומנסה להתאים להם אחד אחד את ה-GET, וזה שמתאים אמור לשלוף את הידיעה המתאימה.
זה הקוד:

if (isset($_GET["cat"]) && $_GET["cat"] != 1) {
$cat_id_result = mysql_query("SELECT $dbfaq_cat_id FROM $dbfaq_cat") or die(mysql_error());
while ($cat_id_row = mysql_fetch_array($cat_id_result)) {
(int)$_GET["cat"];
(int)$cat_id_row[$dbfaq_cat_id];
switch ($_GET["cat"]) {
case $cat_id_row[$dbfaq_cat_id]:
$faq_query = "SELECT * FROM $dbfaq WHERE $dbfaq_cat_ref = $cat_id_row[$dbfaq_cat_id]";
break;
default:
$faq_query = "SELECT * FROM $dbfaq";
break;
}
}
}else{
$faq_query = "SELECT * FROM $dbfaq";
}

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

עכשיו הוצאתי מליון output's, וכולם הראו שהמס' תואמים.
(כן, מדובר במס' ID).
משום מה הוא פשוט לא מזהה שה-
$_GET
שווה
ל-ID.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  וואי גם אני שובר את הראש על ה PHP+SQL עכשיו חבל לך על הזמן.. afroman50 17.02.11 07:28 1
     הקטע שאני עובד פה עם jQuery gilgol1 17.02.11 07:57 2
  זה נחמד שאתה עושה CASTING ל-INT,אבל לאן אתה שומר את זה? Ice Cold  17.02.11 08:16 3
     לא עוזר gilgol1 17.02.11 08:41 4
         בלי קשר, לא הבנתי למה עשית את זה ככה בכלל... Ice Cold  17.02.11 09:36 5
             תשמע זה קטע מוזר gilgol1 17.02.11 10:27 6
                 יש לי הרגשה שאתה מאריך את התהליך שלך בקוד הזה, אתה לא Ice Cold  17.02.11 11:49 7
                     בדיוק כמו שאמרת gilgol1 17.02.11 14:32 8
                         אז לא הבנתי למה אתה צריך לולאה לעזאזל... Ice Cold  17.02.11 14:39 9
                             הלולאה נועדה להגן על השאילתא מהתוכן של ה-GET gilgol1 18.02.11 09:47 11
                                 הדרך למנוע EXPLOIT היא לעשות CAST ל-int. Ice Cold  18.02.11 10:01 13
  שמע הכול טוב ויפה, אין לי מושג למה זה לא עובד, akoka2 17.02.11 20:24 10
     קודם כל, תודה שהכרת לי את ה-mysqli gilgol1 18.02.11 09:53 12
         תקרא את הקוד שוב:) akoka2 18.02.11 14:45 14
  באמת תודה רבה לשניכם על העזרה! gilgol1 18.02.11 23:12 15

       
afroman50
חבר מתאריך 16.8.04
12555 הודעות, 1 פידבק, 0 נקודות
   07:28   17.02.11   
אל הפורום  
  1. וואי גם אני שובר את הראש על ה PHP+SQL עכשיו חבל לך על הזמן..  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   07:57   17.02.11   
אל הפורום  
  2. הקטע שאני עובד פה עם jQuery  
בתגובה להודעה מספר 1
 
   בקטעים די מסובכים,
יעני ממשקים עניינים,
ודווקא בקטנות דברים נופלים.
לעזאזל,
עשיתי switch מליון פעם כבר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   08:16   17.02.11   
אל הפורום  
  3. זה נחמד שאתה עושה CASTING ל-INT,אבל לאן אתה שומר את זה?  
בתגובה להודעה מספר 0
 
התוצאה של CASTING היא int במקרה שלך, אבל אתה לא מציב את זה במשתנה חדש!


$_GET["cat"] = (int)$_GET["cat"];
$cat_id_row[$dbfaq_cat_id] = (int)$cat_id_row[$dbfaq_cat_id];


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   08:41   17.02.11   
אל הפורום  
  4. לא עוזר  
בתגובה להודעה מספר 3
 
   בדקתי את כל הואריאציות,
כולל בדיקה עם הפונקציה is_int כדי לודא ב-100% שזה מספר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   09:36   17.02.11   
אל הפורום  
  5. בלי קשר, לא הבנתי למה עשית את זה ככה בכלל...  
בתגובה להודעה מספר 4
 
בוא נראה אם אני מבין נכון:

יש לך רשימת FAQ ורשימת קטגוריות, אתה רוצה להביא FAQ מקטגוריה מסויימת, שמתקבלת מה-GET, ואם הוא לא מוצא קטגוריה כזו, הוא מביא את כל ה-FAQ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   10:27   17.02.11   
אל הפורום  
  6. תשמע זה קטע מוזר  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 17.02.11 בשעה 10:33 בברכה, gilgol1
 
חשבתי אולי זה חלקים אחרים בסקריפט שמשפיעים עליו,
אז כתבתי אותו יחסית נקי,
בלי עוד סקריפט מסביב,
מעבר לנחוץ,
וזה עדיין לא הולך..

לדעתי הוא תקוע באיזושהי לולאה איפשהו...
אני אמצא את זה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   11:49   17.02.11   
אל הפורום  
  7. יש לי הרגשה שאתה מאריך את התהליך שלך בקוד הזה, אתה לא  
בתגובה להודעה מספר 6
 
אמור לרוץ עם לולאה על הכל... משהו פה נראה לי לא הגיוני.

תסביר מה אתה מנסה לעשות בדיוק.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   14:32   17.02.11   
אל הפורום  
  8. בדיוק כמו שאמרת  
בתגובה להודעה מספר 7
 
   יש לי טבלה אחת עם תוכן, שיש לה עמוד של ID של קטגוריות.
יש לי עוד טבלה עם קטגוריות.
אני רוצה לשלוף מהטבלה של התוכן, ע"פ ה-ID של קטגוריה שמתקבל מהכתובת.

עכשיו ברור שאני יכול לעשות פשוט $_GET, אבל זה לא בטיחותי בעליל. אני מעוניין שהוא יקבל רק את הערכים שקיימים, ואם לא שיקבל את ה-default, שזה כל הקטגוריות.
אגב, אם אני מוחק את ה-Case של ה-default, אז הוא מציג לי את זה כמו שצריך, עם קטגוריות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   14:39   17.02.11   
אל הפורום  
  9. אז לא הבנתי למה אתה צריך לולאה לעזאזל...  
בתגובה להודעה מספר 8
 

if (isset($_GET["cat"]) && $_GET["cat"] != 1) {
$_GET["cat"] = (int)$_GET["cat"];
$cat_id_result = mysql_query("SELECT $dbfaq_cat_id FROM $dbfaq_cat where $dbfaq_cat_id=" . $_GET["cat"]) or die(mysql_error());
if (mysql_num_rows($cat_id_result) > 0)
$faq_query = "SELECT * FROM $dbfaq WHERE $dbfaq_cat_ref = $cat_id_row[$dbfaq_cat_id]";
else
$faq_query = "SELECT * FROM $dbfaq";
}else{
$faq_query = "SELECT * FROM $dbfaq";
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   09:47   18.02.11   
אל הפורום  
  11. הלולאה נועדה להגן על השאילתא מהתוכן של ה-GET  
בתגובה להודעה מספר 9
 
   בדרך שלך,
אני מכניס לשאילתא עצמה את ה-GET
(אגב, טעית, השאילתא שיוצאת ב-IF צריכה להיות:

if (mysql_num_rows($cat_id_result) > 0)
$faq_query = "SELECT * FROM $dbfaq WHERE $dbfaq_cat_ref =" . $_GET["cat"];

זו דרך פחות בטוחה לדעתי...

מצד שני, אם אני מגדיר מראש שה-GET הוא רק מס',
אני משער שאפשר לעבוד עם זה.
כי הפחד שלי הוא מליצור exploit.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   10:01   18.02.11   
אל הפורום  
  13. הדרך למנוע EXPLOIT היא לעשות CAST ל-int.  
בתגובה להודעה מספר 11
 
לא צריך להיות יותר מדי פרנואידים...
אם אתה ממש רוצה, תשתמש בכלל ב-prepared statements, זה מטפל בהכל לבד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

דרג אמינות חבר זה
   20:24   17.02.11   
אל הפורום  
  10. שמע הכול טוב ויפה, אין לי מושג למה זה לא עובד,  
בתגובה להודעה מספר 0
 
   אבל בכול מקרה כתבתי לך פונקציה שלדעתי עושה בדיוק אותו דבר, ולא אמורה לעשות בעיות, וכתובה טיפה יותר מסודר, מקווה שאתה עובד עם MySQLI אם לא פשוט תשנה את השמות של הפונקציות תוריד את הi.

http://paste.pocoo.org/show/340366/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   09:53   18.02.11   
אל הפורום  
  12. קודם כל, תודה שהכרת לי את ה-mysqli  
בתגובה להודעה מספר 10
 
   לא ידעתי על קיומו,
וקראתי עליו קצת עכשיו ונראה לי שאני אעבור אליו.

דבר שני,
תודה רבה על הפונקציה!
אבל אני לא מבין מה ה-$wich עושה,
הרי הוא לא נכלל בשליפת נתונים מהמסד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

דרג אמינות חבר זה
   14:45   18.02.11   
אל הפורום  
  14. תקרא את הקוד שוב:)  
בתגובה להודעה מספר 12
 
   הwhich נועד לתת לך לבחור את השדות בשליפה השניה

אם לא הכנסת כלום הוא יישלוף את כול השדות:P


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
gilgol1 לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 15.6.10
1057 הודעות, 2 פידבק, 4 נקודות
   23:12   18.02.11   
אל הפורום  
  15. באמת תודה רבה לשניכם על העזרה!  
בתגובה להודעה מספר 0
 
   אבל בסוף הלכתי על השיטה של Ice Cold.

אז תודה שוב!
ובאמת לא ציפיתי לכזו היענות, מהירה ומשובחת


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net