לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 01-03-2009, 16:59
  משתמש זכר itaysela itaysela אינו מחובר  
 
חבר מתאריך: 01.02.09
הודעות: 120
שלח הודעה דרך MSN אל itaysela
דיון:הדרך הנכונה לסינון SQL INJ וXSS והתנגשות עם מקרה ספציפי שצורך ביטול סינון

היי חבר'ה.
כמו שאני רואה את זה יש לי שתי אופציות:
  • לסנן את כל הקלט של המשתמש [POST & GET] בעזרת פונקציה שתסנן SQL INJ ו XSS. תוכן שאני צריך שלא יסונן [כמו דפים דינמים שהאדמין יוצר אשר מכילים קוד HTML] להריץ בפונקציה שתחזיר לקוד רגיל.
    חיסרון: הצורה הזו מבזבזת משאבים שכן, משתנה מסויים עובר תהליך לא נחוץ של "הגנה" והסרתה.

  • לסנן רק את המשתנים שאני רוצה.
    חיסרון: הדרך לעשות זאת היא ידנית. משמע: כל משתנה שארצה לסנן אותו, אצטרך באופן ידני להריץ עליו את פונקצית הסינון.
*נכון שגם באפשרות הראשונה אני אצטרך להוסיף באופן ידני על כל משתנה פונקצית אל-סינון אך לפחות במיקרה שלי, זה הרבה פחות להוסיף מאשר במיקרה השני.
מה דעתכם? האם יש פיתרון יותר חכם ללא חסרונות אלה? ומה מבינהם עדיף?
בעיקרון הדרך השניה חוסכת משאבים, אך בפרוייקטים גדולים זו מכה + מכער את הקוד.
_____________________________________
איתי סלע,
פיתוח מערכות תוכנה ואינטרנט.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 01-03-2009, 19:27
  משתמש זכר itaysela itaysela אינו מחובר  
 
חבר מתאריך: 01.02.09
הודעות: 120
שלח הודעה דרך MSN אל itaysela
בתגובה להודעה מספר 2 שנכתבה על ידי iBot שמתחילה ב "אני לא מוצא לנכון לסנן הרבה..."

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

לפניש אני עונה הייתי מעוניין במידע של איך אתה מריץ שאילתה (באיזה אופן)?

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


ציטוט:
במקור נכתב על ידי שימי
לגבי SQL Injections - יש את השיטה של prepared statements עם PDO...

לא מכיר. אשמח אם תפרטו ..

ציטוט:
במקור נכתב על ידי GreenBerret
מסכים עם שימי, ולפי דעתי זו הדרך הנכונה לעבוד עם מסד נתונים.

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


המון סיבות, תלוי במערכת שאתה בונה. אני למשל, בונה מערכת ניהול תוכן[CMS] ובכך מאפשר למנהל האתר ליצור לעצמו את הדפים. כמובן שהוא לא כותב קוד HTML אלה משתמש בעורך טקסט עשיר[בסיגנון WORD].
_____________________________________
איתי סלע,
פיתוח מערכות תוכנה ואינטרנט.


נערך לאחרונה ע"י itaysela בתאריך 01-03-2009 בשעה 19:29.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 02-03-2009, 13:07
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 11 שנכתבה על ידי שימי שמתחילה ב "לגבי SQL Injections - יש את..."

איך משתמשים בשיטה הזו?

לא מצאתי שום חומר ברור ברשת.

מצד אחד אומרים שצריך PHP > 5.1.0, ומצד שני אומרים שזה אפשרי עם PHP 5.0 ...

אומרים ש"צריך להשתמש" ב:
http://il.php.net/manual/en/ref.pdo-mysql.php
אבל בעצם צריך להשתמש ב:
http://il.php.net/manual/en/book.mysqli.php

( ?? )

ואם mysqli הוא זה שצריך להשתמש בו, אז מה ההבדל בין ביצוע הדברים בצורה של הפרוצדורה לבין הצורה של המחלקה? (כאשר שתי השיטות זמינות)

גם אופן השימוש והרצת השאילתות לא ברור. אם אומרים שלא צריך לבצע סינון (כלומר escaping) למידע הנכנס לשאילתא, אז איך יהיה אפשר להבחין בפיסקת LIKE מהו המידע אם הקוד ניכתב בצורה הבאה:
קוד PHP:
 // placeholder must be used in the place of the whole value
$stmt $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%")); 

כפי שאפשר לראות, הקוד הנ"ל נמצא בחלק התחתון בעמוד הבא: http://il.php.net/manual/en/pdo.prepared-statements.php
(בשאילתא הנ"ל, כיוון שכניראה לא צריך לסנן את הקלט, הייתי יכול פשוט להכניס תוים זדוניים כמו "%" )


דבר נוסף הבנתי גם שהרצת prepared statements דרך PDO יעיל אך ורק במקרים מסוימים, לדוגמא מקרים בהם צריך להריץ את אותה השאילתא שוב ושוב, מספר רב של פעמים. דוגמא למקרים כאלה תהיה:
  • UPDATE רבים
  • רקורסיות המריצות את אותה השאילתא (כדי ליצור לדוגמא "עץ" של נתונים כמו התגובות בפורום)
  • וכנראה אולי גם INSERT, למרות שיש לזה אופציה להכניס מספר רב של רשומות בשאילתא אחת (אבל כנראה דרך PDO זה יותר מהיר)

בכל המקרים האחרים, שימוש ב-PDO יהיה מיותר. לכן צריך להשתמש כראוי ולא כל הזמן.


דרך אגב מי שמעוניין הינה כמה לינקים שמסבירים עוד איכשהו על הנושא:
בקיצור הנושא הזה ממש מבולגן, לפחות בשבילי, הייתי שמח לאיזו הפנייה למקור שמסביר היטב על הנושא (חיפשתי בגוגל הרבה...). תודה על כל עזרה שהיא.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 02-03-2009, 16:31
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 12 שנכתבה על ידי dorM שמתחילה ב "איך משתמשים בשיטה הזו? לא..."

המטרה של PDO היא ליצור אבסטרקציה בין השאילתות/מידע לבין השכבה של ה DB. כלומר, אתה לא תקרא low-level ל DB מתוך האפליקציה שאתה כותב, אלא תשתמש ב PDO כמתווך. ואת זה אתה כן תעשה על כל השאילתות שלך. אחד היתרונות הגדולים ביותר, בצורת עבודה שכזו, היא, שאתה בעצם יכול לתמוך בכל DB ש PDO תומך בו, פשוט על ידי שינוי יעד החיבור של אובייקט ה PDO...

לגבי ה escaping - נדמיין שנייה שמדובר בשיטה המסורתית - ואתה עושה mysql_real_escape_string על הקלט - והקלט הוא כלום (אין תווים בקלט) - ספר לי איך זה יותר טוב...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 02-03-2009, 16:55
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 13 שנכתבה על ידי שימי שמתחילה ב "המטרה של PDO היא ליצור..."

ציטוט:
המטרה של PDO היא ליצור אבסטרקציה בין השאילתות/מידע לבין השכבה של ה DB. כלומר, אתה לא תקרא low-level ל DB מתוך האפליקציה שאתה כותב, אלא תשתמש ב PDO כמתווך.

האמת קשה לי להבין את זה, אולי כי אני לא מתכנת בשפות תיכנות (C וכד'...).
מה ההבדל בין שימוש בפונקציות mysql ה"רגילות" לבין PDO בעניין הזה?
הפונקציה mysql_query ומתודת ה-PDO המקבילה לה אמורות לעשות את אותו הדבר, ההבדל הוא שב-PDO אני משתמש כמחלקה.
ציטוט:
אחד היתרונות הגדולים ביותר, בצורת עבודה שכזו, היא, שאתה בעצם יכול לתמוך בכל DB ש PDO תומך בו, פשוט על ידי שינוי יעד החיבור של אובייקט ה PDO...

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

ציטוט:
לגבי ה escaping - נדמיין שנייה שמדובר בשיטה המסורתית - ואתה עושה mysql_real_escape_string על הקלט - והקלט הוא כלום (אין תווים בקלט) - ספר לי איך זה יותר טוב...

בסדר מצדיק אותך כאן, אבל תמיד אפשר לבדוק אם הוא ריק...זה לא העניין כאן.
העניין הוא אם צריך לבצע סינון על הקלט או לא. וראיתי מקומות שאומרים שצריך לבצע סינון, ולעומת זאת מקומות אחרים מרמזים שלא צריך או שאי אפשר לבצע סינון (? :/ --- כמו בפיסקת ה-LIKE, שזה חובה לבצע שם סינון, כי PDO או מסד הנתונים לא יבדילו בין המידע\קלט לשאילתא )
הנושא הזה מוסבר בצורה מאוד מבלבלת ברשת.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 02-03-2009, 17:08
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 14 שנכתבה על ידי dorM שמתחילה ב "[QUOTE]המטרה של PDO היא ליצור..."

ההבדל הוא, כפי שכבר אמרנו:
1. הוצאת הקוד של הגישה ל DB מסויים מתוך הקוד שלך (בדומה להפרדת קוד מעיצוב?)
2. השימוש ב prepared statements שמאפשר להריץ שאילתות מהר יותר [אם הן חוזרות על עצמן]
3. הוצאת המידע שנכנס ויוצא מהשאילתא מתוכן השאילתא. גם יותר קריא, גם יותר חסין מטעויות, וגם מאפשר לך לבצע שינוי במשתנה בודד ולהריץ את השאילתא שוב (מבלי לבנות פונקציה שתבצע את זה, או להשתמש ב foreach ולרוץ על מערכים שבונים מחרוזת של שאילתא שוב ושוב)
4. החסכון ב escaping - שאולי גם עוזר ל performance (אני לא יודע אם זה באמת עוזר. יכול להיות שהוא עושה את זה בכל מקרה, אני לא יודע איך ה DB מקבל באמת את השאילתא מהלקוח במקרה הזה - אם הפרמטרים מועברים בינארית, אין צורך ב escaping. ב blob-ים גדולים זה יכול להיות משמעותי מאוד אם זה ככה...)
5. היכולת, כאמור, לשנות DB, מבלי לשנות שום דבר לאורך הקוד. כולל לא פונקציות escaping, אשר מתאימות כל אחת ל DB שלה. PDO כבר ידאג לזה...

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 02-03-2009, 13:11
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי itaysela שמתחילה ב "דיון:הדרך הנכונה לסינון SQL INJ וXSS והתנגשות עם מקרה ספציפי שצורך ביטול סינון"

ציטוט:
# לסנן את כל הקלט של המשתמש [POST & GET] בעזרת פונקציה שתסנן SQL INJ ו XSS. תוכן שאני צריך שלא יסונן [כמו דפים דינמים שהאדמין יוצר אשר מכילים קוד HTML] להריץ בפונקציה שתחזיר לקוד רגיל.
חיסרון: הצורה הזו מבזבזת משאבים שכן, משתנה מסויים עובר תהליך לא נחוץ של "הגנה" והסרתה.

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


סינון XSS אפשר לבצע אוטומטית מראש על כל הקלט שנכנס, ולשים את הכל במשתנה מסויים. הסיבה היא שבדר"כ, רוב הפעמים, הסינון נדרש.

סינון SQL INJ אני חושב שעדיף לבצע את זה בצורה פנימית, במחלקת ה-PHP שמתעסקת עם מסד הנתונים.
אני אישית משתמש ב- sprintf כך שאני מפריד היטב בין המידע שיסונן לשאילתא.

בנוגע לסינון משתנים בצורה ידנית - נכון שתצטרך להריץ בצורה ידנית את הפונקציה לסינון של כל משתנה, אבל זה לא כזה קריטי. אני דווקא חושב שזה אפילו טוב יותר. עשית לי חשק לבדוק את הנושא...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #18  
ישן 02-03-2009, 19:08
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
Benchmark - סינון של כל הקלט מול סינון באופן ידני וספציפי של הקלט
בתגובה להודעה מספר 17 שנכתבה על ידי dorM שמתחילה ב "[QUOTE]# לסנן את כל הקלט של..."

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


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

קישור לקובץ:

https://2009-uploaded.fresh.co.il/2...2/94004637.phps

מוזמנים להוריד ולבדוק בעצמכם...
בסופו של דבר, כמובן שבחירה באופן ידני של הקלט מהירה יותר.
היחס של מהירות הריצה בין 2 השיטות תלוי בגודל של הקלט. ולכן העניין הזה תלותי ואי אפשר לומר חד-משמעית מה יותר עדיף.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #35  
ישן 05-03-2009, 05:19
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 34 שנכתבה על ידי dorM שמתחילה ב "למה הרבה קוד? מה שאמרת היה..."

הרבה קוד. במקום לעשות טופס ששולח מידע ב POST ולעשות פלט של print_r של GET_$ ... יש ... המון קוד.

התכוונתי בדיוק למה שאמרתי. שההבדל היחיד בין שימוש ב REQUEST לשימוש ב GET, הוא ש REQUEST תמיד יקבל את הנתונים, לא משנה באיזו צורה הם נשלחו, לעומת GET שיציג אותם רק אם מתודת השליחה הייתה GET (כלומר פרמטרים בתוך ה URL). כמובן יכול להיות שאני טועה, אבל במקרה הזה, אין שום הבדל בין GET ל REQUEST - ואין שום סיבה ששניהם יהיו קיימים.

כך או כך, מי שמבסס את אבטחת האפליקציה שלו על משהו שהמשתמש יכול לקבוע (כמו צורת שליחת המידע) - עושה טעות חמורה מאוד. Security by obscurity זה לדעתי תת-מקרה של חטא ההיבריס - ההנחה המטופשת שהפורץ לא מסוגל לחשוב על מה שאתה חשבת - זו יהירות.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #36  
ישן 05-03-2009, 10:05
צלמית המשתמש של fealls
  fealls fealls אינו מחובר  
 
חבר מתאריך: 11.03.07
הודעות: 1,668
בתגובה להודעה מספר 35 שנכתבה על ידי שימי שמתחילה ב "הרבה קוד. במקום לעשות טופס..."

ציטוט:
במקור נכתב על ידי שימי
הרבה קוד. במקום לעשות טופס ששולח מידע ב POST ולעשות פלט של print_r של GET_$ ... יש ... המון קוד.

התכוונתי בדיוק למה שאמרתי. שההבדל היחיד בין שימוש ב REQUEST לשימוש ב GET, הוא ש REQUEST תמיד יקבל את הנתונים, לא משנה באיזו צורה הם נשלחו, לעומת GET שיציג אותם רק אם מתודת השליחה הייתה GET (כלומר פרמטרים בתוך ה URL). כמובן יכול להיות שאני טועה, אבל במקרה הזה, אין שום הבדל בין GET ל REQUEST - ואין שום סיבה ששניהם יהיו קיימים.

כך או כך, מי שמבסס את אבטחת האפליקציה שלו על משהו שהמשתמש יכול לקבוע (כמו צורת שליחת המידע) - עושה טעות חמורה מאוד. Security by obscurity זה לדעתי תת-מקרה של חטא ההיבריס - ההנחה המטופשת שהפורץ לא מסוגל לחשוב על מה שאתה חשבת - זו יהירות.

אני שמח שעוד מישהו חושב כמוני.
חוץ מההטבות שיש לשימוש ב$_REQUEST, אין בזה שום סיכון - אם אתה בכל מקרה בודק הכל.

וכן דור כמות הקוד הייתה ממש מוגזמת זה יכל להיות 6 שורות...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #37  
ישן 05-03-2009, 11:32
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 36 שנכתבה על ידי fealls שמתחילה ב "[QUOTE=שימי]הרבה קוד. במקום..."

ציטוט:
במקור נכתב על ידי שימי
התכוונתי בדיוק למה שאמרתי. שההבדל היחיד בין שימוש ב REQUEST לשימוש ב GET, הוא ש REQUEST תמיד יקבל את הנתונים, לא משנה באיזו צורה הם נשלחו, לעומת GET שיציג אותם רק אם מתודת השליחה הייתה GET (כלומר פרמטרים בתוך ה URL). כמובן יכול להיות שאני טועה, אבל במקרה הזה, אין שום הבדל בין GET ל REQUEST - ואין שום סיבה ששניהם יהיו קיימים.


אבל הקובץ לא הראה שגם אם שלחת במתודת POST אז כל הנתונים התקבלו? <-- כך זה התקבל אצלי
התקבלו נתונים גם ב-GET, גם ב-POST... כאשר מתודת השליחה הייתה POST

ציטוט:
במקור נכתב על ידי שימי
כך או כך, מי שמבסס את אבטחת האפליקציה שלו על משהו שהמשתמש יכול לקבוע (כמו צורת שליחת המידע) - עושה טעות חמורה מאוד. Security by obscurity זה לדעתי תת-מקרה של חטא ההיבריס - ההנחה המטופשת שהפורץ לא מסוגל לחשוב על מה שאתה חשבת - זו יהירות.

למה שמישהו מקצועי *יבסס* את האבטחה שלו על דבר כזה? :|
בכל מקרה אני חושב שזה לא יזיק *להוסיף* את נקיטת אמצעי הזהירות הזה.

ציטוט:
במקור נכתב על ידי שימי
הרבה קוד. במקום לעשות טופס ששולח מידע ב POST ולעשות פלט של print_r של GET_$ ... יש ... המון קוד.

ציטוט:
במקור נכתב על ידי fealls
וכן דור כמות הקוד הייתה ממש מוגזמת זה יכל להיות 6 שורות...


ממש לא ><
אני מתבייש לומר שהעתקתי חלקי קוד מקובץ בדיקה אחר שעשיתי....

נערך לאחרונה ע"י dorM בתאריך 05-03-2009 בשעה 11:46.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #38  
ישן 05-03-2009, 11:48
צלמית המשתמש של fealls
  fealls fealls אינו מחובר  
 
חבר מתאריך: 11.03.07
הודעות: 1,668
בתגובה להודעה מספר 37 שנכתבה על ידי dorM שמתחילה ב "[QUOTE=שימי]התכוונתי בדיוק..."

ציטוט:
במקור נכתב על ידי dorM
אבל הקובץ לא הראה שגם אם שלחת במתודת POST אז כל הנתונים התקבלו? <-- כך זה התקבל אצלי
התקבלו נתונים גם ב-GET, גם ב-POST... כאשר מתודת השליחה הייתה POST

לא ניסיתי את הקוד שלך, אבל מההיגיון, ממה שאני מכיר מהעבר, ומהניסיון הזה שלי - אתה טועה.
קוד PHP:
<?php
echo '$_REQUEST = ';
print_r($_REQUEST);
echo 
"\n".'<br />--- $_GET = ';
print_r($_GET);
echo 
"\n".'<br />--- $_POST = ';
print_r($_POST);
?>
<form name="testForm" action="" method="POST">
<input type="text" name="name" value="dvir" />
<input type="text" name="subject" value="today" />
<input type="text" name="age" value="20" />
<input type="submit" name="submitTestForm" value="submit" />
</form>


הפלט:
קוד PHP:
 $_REQUEST = Array (     [name] => dvir     [subject] => today     [age] => 20     [submitTestForm] => submit )  
--- 
$_GET = Array ( )  
--- 
$_POST = Array (     [name] => dvir     [subject] => today     [age] => 20     [submitTestForm] => submit 


http://www.fealls.net/test.php
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #40  
ישן 05-03-2009, 12:03
צלמית המשתמש של fealls
  fealls fealls אינו מחובר  
 
חבר מתאריך: 11.03.07
הודעות: 1,668
בתגובה להודעה מספר 39 שנכתבה על ידי dorM שמתחילה ב "לרגע הבהלת אותי :s ב-GET אין..."

ציטוט:
במקור נכתב על ידי dorM
לרגע הבהלת אותי :s

ב-GET אין מידע כי אין URL query string במאפיין action שבתג form, ולכן המערך GET_$ יהיה ריק.

תנסה להפעיל את הקוד הבא:
קוד PHP:
<?php

define
('_FILE_',basename(__FILE__));

echo 
'$_REQUEST = ';
print_r($_REQUEST);
echo 
"\n".'<br />--- $_GET = ';
print_r($_GET);
echo 
"\n".'<br />--- $_POST = ';
print_r($_POST);
?>
<form name="testForm" action="<?php echo _FILE_,'?get_Data=yes&amp;get_exists=1' ?>" method="POST">
<input type="text" name="name" value="dvir" />
<input type="text" name="subject" value="today" />
<input type="text" name="age" value="20" />
<input type="submit" name="submitTestForm" value="submit" />
</form>


הרצתי, וקיבלתי בדיוק את הפלט לו ציפיתי, הנתונים שנשלחו ב POST הופיעו ב $_POST, והנתונים שנשלחו ב GET (דרך שורת הכתובת) הופיעו ב$_GET, ו$_REQUEST פשוט הכיל את שניהם ביחד
קוד PHP:
 $_REQUEST = Array (     [get_Data] => yes     [get_exists] => 1     [name] => dvir     [subject] => today     [age] => 20     [submitTestForm] => submit )  
--- 
$_GET = Array (     [get_Data] => yes     [get_exists] => )  
--- 
$_POST = Array (     [name] => dvir     [subject] => today     [age] => 20     [submitTestForm] => submit 


כנראה שלא הבנתי נכון מה שניסית להגיד מלכתחילה - אני הבנתי שאתה טוען שלא משנה אם זה POST או GET - זה בכל מקרה יופיע בשניהם ואז אין טעם לשימוש ב $_REQUEST... תקן אותי אם אני טועה?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #41  
ישן 05-03-2009, 13:26
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 40 שנכתבה על ידי fealls שמתחילה ב "[QUOTE=dorM]לרגע הבהלת אותי..."

ציטוט:
הרצתי, וקיבלתי בדיוק את הפלט לו ציפיתי, הנתונים שנשלחו ב POST הופיעו ב $_POST, והנתונים שנשלחו ב GET (דרך שורת הכתובת) הופיעו ב$_GET, ו$_REQUEST פשוט הכיל את שניהם ביחד


אכן זה מה שהתכוונתי, זאת התופעה הנכונה.

ציטוט:
כנראה שלא הבנתי נכון מה שניסית להגיד מלכתחילה - אני הבנתי שאתה טוען שלא משנה אם זה POST או GET - זה בכל מקרה יופיע בשניהם ואז אין טעם לשימוש ב $_REQUEST... תקן אותי אם אני טועה?

מה פתאום ><
חשבתי שהתכוונתם שכאשר המתודה היא נניח POST, הנתונים במערך $_GET לא יופיעו בכלל.
הערכים של מערכי POST, GET, COOKIE, SERVER ייכנסו ל- request לפי סדר מסויים שנקבע במשתנה variables_order ב-php.ini, כאשר בברירת מחדל SERVER המשמעותי ביותר, אחריו COOKIE, אחריו POST ולבסוף הכי פחות משמעותי הוא GET. המשמעותי ביותר דורס את הערכים של הפחות משמעותי.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #43  
ישן 05-03-2009, 16:49
צלמית המשתמש של tnadav1
  משתמש זכר tnadav1 tnadav1 אינו מחובר  
 
חבר מתאריך: 02.10.05
הודעות: 2,355
שלח הודעה דרך MSN אל tnadav1
בתגובה להודעה מספר 31 שנכתבה על ידי שימי שמתחילה ב "מצטער אבל לא הבנתי. איזה..."

מה התחלתם לקטול אותי?

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

יש סיבה טובה למה יש הפרדה בין GET ל- POST. שני המטודות קיימות למטרות שונות.
דוגמא קלאסית זה phpMyAdmin שכל השימוש במערכת הוא רק ב- POST, ללא שום היגיון, והתוצאה היא שבכל הקטע של לעשות Refresh אתה נדפק..

סדר בתוכנה זה בין הדברים היותר חשובים, מכל הבחינות (מהירות ריצה, פחות קוד, תחזוקה מהירה, וכן, גם אבטחה..)
שימוש ב-
קוד PHP:
 $_REQUEST 

דופק לך את זה.

ציטוט:
הערכים של מערכי POST, GET, COOKIE, SERVER ייכנסו ל- request לפי סדר מסויים שנקבע במשתנה variables_order ב-php.ini, כאשר בברירת מחדל SERVER המשמעותי ביותר, אחריו COOKIE, אחריו POST ולבסוף הכי פחות משמעותי הוא GET. המשמעותי ביותר דורס את הערכים של הפחות משמעותי.

את האמת עד עכשיו לא הבנתי את הקטע הזה, אבל בנוסף זה משהו שנקבע ב- ini.php, ככה שלא הייתי יותר מידי סומך על זה..
_____________________________________


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 01:16

הדף נוצר ב 0.14 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר