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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 08-10-05, 19:11   # 1
Ikki
חסום
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: Israel
הודעות: 608

Ikki לא מחובר  

Exclamation [מדריך] PHP - הגנה נגד הזרקות כתובת

בס"ד

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

מהם הזרקות?
הזרקות הינם זריקת תוכן מסויים לתוך משתנה.
היעד שלהם הוא לשטול מידע שיגרום לבאג/תוכן שגוי במערכת.


כיצד פועלות ההזרקות הכתובת?
ההזרקות הללו פועלות ע"י שליחת תוכן אחר לתוך שורת הכתובת.

למשל נתונה הכתובת:
קוד:
index.php?act=addpoint&add=500
ובמידה והקובץ אינו מוגן מהזרקות נוכל לשנות ערכים שיגרמו לבעיות.
ותוזרק הכתובת הבאה:
קוד:
index.php?act=addpoint&add=50000.464;?>
דבר אשר יגרום לבעיות.


כיצד נמנע ההזרקות כתובת?

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

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

- מניעת הזריקות למשתנה.
כפי שידוע לנו במידה ולא נמנע את הזריקות הנתונים מהכתובת ייובאו לתוך משתנים.
כדוגמא זו:
ציטוט:
index.php?act=addpoint&add=500
בעצם שורת כתובת זו תבצע את השורות הבאות.
PHP קוד:
<?php
$act 
"addpoint";
$add 500;
?>
כלומר, הנתונים יוזנו לתוך המשתנה(addpoint יוזן למשתנה act, ו 500 יוזן למשתנה add).

כיצד נמנע זואת?
נוכל למנוע זואת ע"י הזנה שזוהיא שליחת GET.
ונבנה את הקוד הבא:
PHP קוד:
<?php
$action 
$_GET[act];
$nadd $_GET[add];
?>
* אפשר לכתוב בתוך ה [] עם גרשיים קטנים או בלעדיים, זה עניין של נוחות.

- ניפוי באגים והקצבת מספר ערכים אפשריים.

במידה ואנו מעוניינים ליצור את כל הפעולות בקובץ אחד, כלומר ליצור action.
כיצד ניצור זואת?, ניצור זואת ע"י פונקציית ה Switch.

לדוגמא:
PHP קוד:
<?php
switch($_GET[act]) {
case 
"addpoint":
    include(
"include/addpoint.php");
    break;
case 
"points":
    include(
"include/points.php");
    break;
case 
"main":
    include(
"include/main");
    break;
default:
    include(
"include/main.php");
}
?>

כאן אנו מזינים שיש אפשרות לact להיות שלושה ערכים(addpoint, points, main), ואם לא הוגדר ערך תגדיר תעשה כך וכך.
כמובן שנוכל להיות מתוחכמים יותר ע"י לולאה שיוצר את ה case ע"פ הקבצים הקיימים במחיצת "include".

למידע נוסף אודות פונקצייה זואת בקרו ביחידה המסבירה על פונקציית Switch במדריך הרישמי של Php:
http://www.Php.Net/Switch


בהצלחה!,
Ikki

Last edited by Ikki; 08-10-05 at 21:06..
  Reply With Quote
ישן 08-10-05, 19:21   # 2
satan
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 1,582

satan לא מחובר  

תודה רבה באמת!

ציפתי למדריך כזה- עוד לא קראתי הכול, אשמח אם תמשיך ותרחיב עוד על נושא האבטחה בPHP ! [=

ויש לי שאלה קטנה.
htmlspecialchars();
הפונקציה הזו יעיל לאבטחה כנגד סקריפטים זדוניים? S:
והאם לאחר שימוש בה תהיה לי בעיה להכניס קודי BB? (לא בטוח שקוראים לזה קודי BB אבל אני מתכוון כמו כתב בולט,קו תחתון כמו שיש בפורום קודים מהירים כאלה).

Last edited by satan; 08-10-05 at 19:25..
  Reply With Quote
ישן 08-10-05, 19:26   # 3
Ikki
חסום
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: Israel
הודעות: 608

Ikki לא מחובר  

htmlspecialchars() אינו קשור להזרקות כתובת.
זה פקודה אשר מונעות קודי HTML בטקסט.
כלומר אם תכתוב <b> זה יציג את זה כמו שזה בלי פעולת הטאגית(פשוט <B>), להבדיל מטאגי BBCode שהם טאגים אשר נכתבו ב PHP, כתבו פונקצייה שמחליפה זה הכל, וכמובן שהם לא מובנים אם אתה בונה מערכת, אתה צריך להוסיף אותם, או שתוריד אותם מאפשהוא(אם זה אפשרי) או שתבנה אותם.

בהצלחה...

Last edited by Ikki; 08-10-05 at 19:36..
  Reply With Quote
ישן 08-10-05, 19:31   # 4
omaniusd
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 823

omaniusd לא מחובר  

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

מהם הזרקות?
הזרקות הינם זריקת תוכן מסויים לתוך משתנה.
היעד שלהם הוא לשטול מידע שיגרום לבאג/תוכן שגוי במערכת.


כיצד פועלות ההזרקות?
ההזרקות פועלות ע"י שליחת תוכן אחר לתוך שורת הכתובת.

למשל נתונה הכתובת:

ובמידה והקובץ אינו מוגן מהזרקות נוכל לשנות ערכים שיגרמו לבעיות.
ותוזרק הכתובת הבאה:

דבר אשר יגרום לבעיות.


כיצד נמנע ההזרקות?

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

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

- מניעת הזריקות למשתנה.
כפי שידוע לנו במידה ולא נמנע את הזריקות הנתונים מהכתובת ייובאו לתוך משתנים.
כדוגמא זו:


בעצם שורת כתובת זו תבצע את השורות הבאות.
PHP קוד:
<?php
$act 
"addpoint";
$add 500;
?>
כלומר, הנתונים יוזנו לתוך המשתנה(addpoint יוזן למשתנה act, ו 500 יוזן למשתנה add).

כיצד נמנע זואת?
נוכל למנוע זואת ע"י הזנה שזוהיא שליחת GET.
ונבנה את הקוד הבא:
PHP קוד:
<?php
$action 
$_GET[act];
$nadd $_GET[add];
?>
* אפשר לכתוב בתוך ה [] עם גרשיים קטנים או בלעדיים, זה עניין של נוחות.

- ניפוי באגים והקצבת מספר ערכים אפשריים.

במידה ואנו מעוניינים ליצור את כל הפעולות בקובץ אחד, כלומר ליצור action.
כיצד ניצור זואת?, ניצור זואת ע"י פונקציית ה Switch.

לדוגמא:
PHP קוד:
<?php
switch($_GET[act]) {
case 
"addpoint":
    include(
"include/addpoint.php");
    break;
case 
"points":
    include(
"include/points.php");
    break;
case 
"main":
    include(
"include/main");
    break;
default:
    include(
"include/main.php");
}
?>

כאן אנו מזינים שיש אפשרות לact להיות שלושה ערכים(addpoint, points, main), ואם לא הוגדר ערך תגדיר תעשה כך וכך.
כמובן שנוכל להיות מתוחכמים יותר ע"י לולאה שיוצר את ה case ע"פ הקבצים הקיימים במחיצת "include".

למידע נוסף אודות פונקצייה זואת בקרו ביחידה המסבירה על פונקציית Switch במדריך הרישמי של Php:
http://www.Php.Net/Switch


בהצלחה!,
Ikki
זה חלק מאד מצומצם מנוזא ההזרקות.
  Reply With Quote
ישן 08-10-05, 19:34   # 5
WebProject
מ.תיכנות
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: אשדוד
הודעות: 3,070
Send a message via Skype™ to WebProject

WebProject לא מחובר  

זה שהגיב מעליי צודק, די מצומצם, אבל כל הכבוד על ההשקעה.

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

בדיקת המחרוזת, אם היא תקינה [מבחינת תווים].

או, להכין פונקצייה שתתרגם את התווים לתווי HTML כלומר למשל & = &amp;

__________________
כושר קרבי \ טיפים לגיבושים



פורטל רעל - צבא וכושר קרבי
  Reply With Quote
ישן 08-10-05, 19:36   # 6
Ikki
חסום
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: Israel
הודעות: 608

Ikki לא מחובר  

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

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

*שחכתי בכותרת לרשום "הזרקות כתובת" ...

Last edited by Ikki; 08-10-05 at 19:45..
  Reply With Quote
ישן 09-10-05, 06:43   # 7
satan
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 1,582

satan לא מחובר  

ציטוט:
נכתב במקור על ידי 1ndex
זה שהגיב מעליי צודק, די מצומצם, אבל כל הכבוד על ההשקעה.

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

בדיקת המחרוזת, אם היא תקינה [מבחינת תווים].

או, להכין פונקצייה שתתרגם את התווים לתווי HTML כלומר למשל & = &amp;

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

תמשיך..!D:
  Reply With Quote
ישן 09-10-05, 08:44   # 8
eLad
Fatal Error
 
eLad's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: localhost
גיל: 38
הודעות: 1,968

eLad לא מחובר  

1. הצפנה על הצפנה על הצפנה לא תורמת בכלום, היא רק מאיטה את פעולת הדף. אם אתה רוצה הצפנה מקסימלית קח אלגוריתם 512 ביט ולא MD5 או SHA-1

2. שיטת ה include שלך לכל פעולה ופעולה לא יעילה, במקום לאנקלד את הדף, ב switch היית יכול לשים את הפעולות שזה אמור לעשות (למשל - עדכון עמודה ב DB).

3. השיטה של יצירת משתנה פיקטיבי לא עוזרת לך בכלום

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

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

6. במסדים מסויימים, כמו למשל SQL SERV אפשר להריץ פקודות אחרות למשל:

PHP קוד:
;drop table tblMessages-- 
והלכה לו הטבלה, במקרה כזה אפשר להקצות הרשאות (חלק מהחוכמה של SQL SERV).

7. אחרי קריאת המדריך פעמיים לא הבנתי איך השיטה שלך עוזרת למנוע sql injection

8. בהצלחה

9. לזה שמעלי - חפש פרוייקט בשם underwarrior או משהו כזה, יש להם מדריכים מצויינים בנושא ובעברית..
  Reply With Quote
ישן 09-10-05, 12:54   # 9
Ikki
חסום
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: Israel
הודעות: 608

Ikki לא מחובר  

ציטוט:
נכתב במקור על ידי eLad
1. הצפנה על הצפנה על הצפנה לא תורמת בכלום, היא רק מאיטה את פעולת הדף. אם אתה רוצה הצפנה מקסימלית קח אלגוריתם 512 ביט ולא MD5 או SHA-1

2. שיטת ה include שלך לכל פעולה ופעולה לא יעילה, במקום לאנקלד את הדף, ב switch היית יכול לשים את הפעולות שזה אמור לעשות (למשל - עדכון עמודה ב DB).

3. השיטה של יצירת משתנה פיקטיבי לא עוזרת לך בכלום

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

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

6. במסדים מסויימים, כמו למשל SQL SERV אפשר להריץ פקודות אחרות למשל:

PHP קוד:
;drop table tblMessages-- 
והלכה לו הטבלה, במקרה כזה אפשר להקצות הרשאות (חלק מהחוכמה של SQL SERV).

7. אחרי קריאת המדריך פעמיים לא הבנתי איך השיטה שלך עוזרת למנוע sql injection

8. בהצלחה

9. לזה שמעלי - חפש פרוייקט בשם underwarrior או משהו כזה, יש להם מדריכים מצויינים בנושא ובעברית..
א. לא דיברתי על הזרקת SQL כלל וכלל, "הבנת הנקרא".
ב. האינקלוד ב Switch לצורך הדגמה, ושלא לדבר על הטעות האיומה שזה מאט!.

להבא תקרא טוב את הכתוב("הזרקות כתובת") ואל תמהר להגיב בצורה כה שלילית, כי הטועה פה הוא אתה בלבד.

סליחה על התגובה הכועסת אבל ממש מרגיז לקבל תגובה שלילית כאשר מדלגים על הכותרת וקוראים מה שרוצים!, כנראה אצתרך לפתוך מדריך "כיצד לחזור לכיתה א'?".
  Reply With Quote
ישן 09-10-05, 14:46   # 10
eLad
Fatal Error
 
eLad's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: localhost
גיל: 38
הודעות: 1,968

eLad לא מחובר  

ציטוט:
נכתב במקור על ידי Ikki
א. לא דיברתי על הזרקת SQL כלל וכלל, "הבנת הנקרא".
ב. האינקלוד ב Switch לצורך הדגמה, ושלא לדבר על הטעות האיומה שזה מאט!.

להבא תקרא טוב את הכתוב("הזרקות כתובת") ואל תמהר להגיב בצורה כה שלילית, כי הטועה פה הוא אתה בלבד.

סליחה על התגובה הכועסת אבל ממש מרגיז לקבל תגובה שלילית כאשר מדלגים על הכותרת וקוראים מה שרוצים!, כנראה אצתרך לפתוך מדריך "כיצד לחזור לכיתה א'?".
א. בסדר, תוריד לעצמך את סעיפים 5,6,7 משם, כל השאר עדיין תקף
ב. תוכיח. אני טוען שזה מאט מאשר לבצע פעולות בדף עצמו במבנה switch

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

תכתוב מדריך איך לחזור לכיתה א' אם זה מה שעושה לך את זה, אני לא צריך את זה.
__________________
eLad
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 

Tags
אבטחה, מדריך למתקדמים, מדריך php

כלים לאשכול
תצורת הצגה

חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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