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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 05-08-06, 22:24   # 1
WebProject
מ.תיכנות
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: אשדוד
הודעות: 3,070
Send a message via Skype™ to WebProject

WebProject לא מחובר  

[מדריך] PHP - אבטחת מידע

שוב שלום לכם,

אבטחת מידע

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

מדוע לאבטח?

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

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

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

מה ניתן לעשות?

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

לרוב נעשות שליחות מידע דרך תיבות טקסט (POST), ודרך כתובת האתר (GET), ובמדריך זה נלמד לאבטח בבסיסיות את שני דרכי העברת מידע אלו.

לדוגמא!:

אתם מעוניינים לשלוף מן המסד, כתבה, שקבלת מספרה האוטומטי(ID), מתבצעת דרך GET.

כתובת אתר לדוגמא:

PHP קוד:
index.php?act=articles&ID=
עד עכשיו, הכל פשוט, הact הינו מחרוזת (string), והID הינו מספר שלם (INTEGER).

לדוגמא שליפת נתונים:

PHP קוד:
$query mysql_query("SELECT * FROM `articles` WHERE ID = '{$_GET['id']}"); 
אין בעיות? לא? אז ככה, שזו טעות חמורה, בעצם נתתם לגולש אפשרות לכתוב כל ID שהוא רוצה, כולל מחרוזות.

משתמש יכול פשוט לשנות את הID, למשהו אחר,

PHP קוד:
index.php?act=articles&ID=hey i am hacking 
כמובן שאף אחד אינו רוצה שלגולש תהייה האפשרות לבצע דבר כזה, ולכן, עלינו לוודא, האם המחרוזת שקיבלנו במתודה GET, הינו מספר שלם, ניתן לוודא בעזרת הפונקצייה is_numeric.

לדוגמא:

PHP קוד:
if(!is_numeric($_GET['ID'])){
    echo 
'נא הקש ID חוקי';
}
else{
 
// mysql

די פשוט, ודי יעיל, אבל מה בידי מידע הנשלח דרך טפסים?

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

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

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


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



פורטל רעל - צבא וכושר קרבי
  Reply With Quote
ישן 05-08-06, 22:26   # 2
Pavel
WBD.co.il
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 1,264

Pavel לא מחובר  

כל הכבוד על ההשקעה טל, מדריך מצוין


אגב, הציטוט בחתימה - אני אותך לרצוח מחר.
  Reply With Quote
ישן 05-08-06, 23:33   # 3
Eli-Hai
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
הודעות: 2,758

Eli-Hai לא מחובר  

הmysql_real_escape_string, אף פעם לא השתמשתי בו, אבל אקסטרה הגנה לא מזיקה.
תודה רבה טל.
  Reply With Quote
ישן 06-08-06, 06:03   # 4
sUP
משתמש תחת חוזה ניסיון.
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: אזור חיפה
הודעות: 1,948

sUP לא מחובר  

כל הכבוד טלוש =]

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

וטיפ קטן, לחסימת תווי HTML:
PHP קוד:
$var htmlspecialchars($var); 
אבטחת מידע נוספת יכולה להיות גם הצפנות (md5, sha1 וכו'..)
__________________

לפרטים נוספים dani3l@gmail.com (אימייל)
  Reply With Quote
ישן 06-08-06, 06:25   # 5
-VladK-
הוסטסניון
 
-VladK-'s Avatar
 
מיני פרופיל
תאריך הצטרפות: Apr 2006
גיל: 33
הודעות: 2,182

-VladK- לא מחובר  

וואלה....תודה ...תגיד לי רק דבר אחד בבקשה....

מה ההבדל בmysql_real_escape_string לבין mysql_escape_string

קראתי על שניהם בPHP.NET ולפי מה שהבנתי הן עושות פעולות שונות אבל בשביל אותה המטרה...

לדוגמא:
REAL מכניס סלאשים לפני גרש גרשיים וכו'...
ובלי REAL...אההההם שחכתי אבל זה עושה משהו אחר...אבל בכל מקרה הרעיון הוא אותו רעיון...אז למה עשו עוד כאלה?
  Reply With Quote
ישן 06-08-06, 14:37   # 6
amirs_5
הוסטסניון
 
amirs_5's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: ת"א
גיל: 33
הודעות: 2,168
שלח הודעה באמצעות ICO אל amirs_5 Send a message via Skype™ to amirs_5

amirs_5 לא מחובר  

אחלה מדריך
שימוש בחסימת מספרים ב GET אני עושה תמיד..
אבל יש בעיות יותר אם מחרוזות ולא עם מספרים...דוגמא :
קוד:
index.php?act=articles&ID=1' AND user='amir
או בכלל...
קוד:
index.php?act=articles&ID=1'; SELECT pass FROM members WHERE name='amir
הרעיון שלי להתמודד עם זה זה לחסום רווחים ב GET .

PHP קוד:
$string $_GET['id'];
if (
eregi('%20'$string)) {
echo 
"ID שגוי אנא נסה שנית";
exit;

ככה לא ?..=]
תקנו אותי אם אני טועה...פשוט לא בדקתי אם עובד..
__________________
אימיל \ מסן : amirs91 [at] gmail.com
  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. הזמן כעת הוא 23:22.

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