הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   תכנות - מדריכים, code snippets (https://hosts.co.il/forums/forumdisplay.php?f=68)
-   -   [מדריך] PHP - אבטחת מידע (https://hosts.co.il/forums/showthread.php?t=28155)

WebProject 05-08-06 22:24

[מדריך] 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 והיא אמורה לעזור לנו להתמודד עם תווים שעלולים לפגוע בשאליתות, ובמידע הנשלח מן המשתמש.

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


-טל =]

Pavel 05-08-06 22:26

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


אגב, הציטוט בחתימה - אני אותך לרצוח מחר:).

Eli-Hai 05-08-06 23:33

הmysql_real_escape_string, אף פעם לא השתמשתי בו, אבל אקסטרה הגנה לא מזיקה.
תודה רבה טל. :)

sUP 06-08-06 06:03

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

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

וטיפ קטן, לחסימת תווי HTML:
PHP קוד:

$var htmlspecialchars($var); 

אבטחת מידע נוספת יכולה להיות גם הצפנות (md5, sha1 וכו'..)

-VladK- 06-08-06 06:25

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

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

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

לדוגמא:
REAL מכניס סלאשים לפני גרש גרשיים וכו'...
ובלי REAL...אההההם שחכתי אבל זה עושה משהו אחר...אבל בכל מקרה הרעיון הוא אותו רעיון...אז למה עשו עוד כאלה?

amirs_5 06-08-06 14:37

אחלה מדריך :)
שימוש בחסימת מספרים ב 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;


ככה לא ?..=]
תקנו אותי אם אני טועה...פשוט לא בדקתי אם עובד..


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

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