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

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



  #2  
ישן 19-03-2015, 21:23
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,301
בתגובה להודעה מספר 1 שנכתבה על ידי Nati323 שמתחילה ב "ממה צריך להתגונן כשבונים אתר?"

בפשטות אתה צריך לענות על השאלה הזו כך:

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

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

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

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 19-03-2015, 22:18
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,301
בתגובה להודעה מספר 3 שנכתבה על ידי Nati323 שמתחילה ב "אממ התנאי שלך מגדיר סוג..."

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

אני אמרתי שאתה מניח לגביו הנחות מסויימות. ושזה בסדר כל עוד שאתה מוודא שהדבר הזה כך.

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

לדוגמה, אתה מניח שזה בסדר להדפיס קלט שהגיע מהמשתמש. ואתה צודק - כל עוד שאתה מודא שהקלט הזה לא יוצא כפי שהגיע מהדפדפן - על ידי זה שכל פלט שכזה לדפדפן, נעטף בפונקציה שמציגה אותו כטקסט HTML, ולא כקוד HTML (במקרה של PHP, למשל, באמצעות htmlentities()).

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 19-03-2015, 22:24
צלמית המשתמש של MatiM
  משתמש זכר MatiM MatiM אינו מחובר  
 
חבר מתאריך: 12.04.06
הודעות: 2,021
שלח הודעה דרך MSN אל MatiM
בתגובה להודעה מספר 3 שנכתבה על ידי Nati323 שמתחילה ב "אממ התנאי שלך מגדיר סוג..."

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

הוא לא התכוון רק לבדוק האם הסוג הוא "מחרוזת" או "מספר" וכו'.

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

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

אם אתה רוצה למנוע XSS אז הציפייה שהטקסט הנקלט לא יכיל תגים/סקריפטים אסורים שעלולים לרוץ על הדפדפן של הלקוח.


אז בכללי, כמו שהוא ניסח - "האם הדבר תואם להנחה שלך".

עוד סיפור שאולי יבהיר את העניין טוב יותר -

לקוח מכאן:

לצפייה במקור באתר YouTube, לחצו כאן.
(בערך בדקה 2:10)

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 19-03-2015, 23:02
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,301
בתגובה להודעה מספר 6 שנכתבה על ידי Nati323 שמתחילה ב "א) אהבתי תדוגמא עם הבנק. ב)..."

ב. אני ממש לא מסכים שצריך להיות גאון. זה לא מסובך להגיד "אני מוכן שיקרה רק כך וכך", ואז לוודא באמצעות קוד שאכן קורה רק מה שאתה מוכן שיקרה. אולי אולי אולי יכולתי להסכים לגבי CSRF שזה נניח "מתוחכם" יותר - אבל כולנו מודעים לאביוז באינטרנט, וכולנו מכירים למשל CAPTCHA ויודעים לשם מה היא קיימת, וכו', וזה פשוט מגלישה באינטרנט - בלי בכלל להיות מתכנתים. קצת להפעיל את הראש, לא הרבה יותר מזה. פרצות האבטחה היא לא בגלל אנשים שהם לא "גאוני עולם" (טוב, אולי בסביבות שבהן הסביבה מנהלת בשבילך הכל בלי שכמעט יש לך אחריות על כלום, כמו ג'אווה ודוט נט, אפשר לטעון דבר כזה) - אלא בעיקר בגלל שאנשים הם "עצלני עולם" ו/או משתמשים במימרא המפורסמת: "לי זה לא יקרה..."

אתה חייב לזכור: כתיבת תוכנה (ואתר דינאמי הוא תוכנה לכל דבר) אמורה להתייחס לכל המצבים האפשריים שבהם היא יכולה להתקל. ואפילו אם ההתייחסות היא "קלט שגוי, נסה שנית", בלי להבין יותר מדי - זה מספיק. לא צריך לרדת לרמה של "זוהו התווים השגויים נקודה ופסיק בקלט שלך, אנא מחק אותם" [לא שקשה לממש קוד שמחזיר רק את סט התווים השגויים במהלך הולידציה...] - אלא מספיק "זוהו תווים שגויים". ואולי אפילו "תקלה". ואתה יודע מה? אפילו שיקבל מסך לבן אם הוא עושה משהו שהוא לא אמור לעשות בצורה תקינה. תאמין לי שאם הקוד שלך נראה עובד ומחזיר שגיאות סבירות בכל משהו שמשתמש לא זדוני יכול לבצע באתר - אף אחד לא יתלונן. ואם איזה טרול שמנסה לפרוץ לך לאתר מתלונן שהוא מקבל דף חלק (מי אמר אנשי QA? ) - תתעלם
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 20-03-2015, 15:15
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,301
בתגובה להודעה מספר 9 שנכתבה על ידי Nati323 שמתחילה ב "בשביל לכתוב את הקוד שיבדוק את..."

באמת לא היית חושב על וידוא הסכום שהלקוח מכניס באתר של הבנק?

בוא נראה מה זה לא יכול להיות לפי ההגיון:

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

בנקודה זו בעצם יש לך הגדרה של איזה סכומים הלקוח יכול להעביר. ואתה אומר לעצמך לדוגמה: "הוא יכול להעביר בין 0 ל 10,000 ש"ח בפעולה בודדת". עכשיו אתה מסתכל על המשתנה שקלטת ממנו, ושואל את השאלה: "האם המשתנה הזה יכול להכיל רק ערכים בין 0 ל 10,000 ש"ח?" ואיך אתה כותב את זה?
קוד:
if (sum > 0 and sum <= 10000)

(למה לא גדול-שווה אפס? כי לא מעבירים 0 ש"ח, זה לא הגיוני...)

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

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

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

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

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

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

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

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



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

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

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

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