הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 27-04-12, 14:38   # 1
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

שאלת אבטחה בהכנסת נתונים

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

הבעיה היא כזו- למיטב הבנתי הפונקציה לא שומרת על הטקסט ומחזירה שגיאה במידה ונמצאו בו התווים הבאים: (תקנו אותי אם אני טועה)
\x00
\n
\r
\
'
"
\x1a

אבל מצד שני כן הייתי רוצה לאפשר למשתמשים להכניס \ , " , ' ... ואולי עוד פרמטרים האם אין פונקציה מוכנה , אפילו לא מובנית ב PHP שכבר מריצה והופכת ל HTML או תוים בטוחים את המחרוזת שהוכנס לה גם אם היא מחזיקה ניסיון פריצה? כלומר שומרת על הכתוב כך שבמידה ואכן נכנס משתמש תמים שהחליט לעשות איזה סמיילי שכולל /r או ' ' שהוא יוכל לעשות זאת בשקט.

תודה מראש.
__________________
- חייך הכל לטובה .
  Reply With Quote
ישן 27-04-12, 14:46   # 2
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

הפונקצייה לא מחזירה שגיאה, היא מבריחה את התווים שהבאת ..
  Reply With Quote
ישן 27-04-12, 14:52   # 3
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

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

בנוסף לכך -
במחלקות חדשות יותר לעבודה מול מסדי נתונים (לדוג' MySQLi ו- PDO) יש אפשרות לעבוד עם placeholders בשאילתות,
כך ניתן להפריד בין המבנה והתחביר של השאילתה לבין המידע שמתקבל מהמשתמש ולמנוע ממנו לבצע בשאילתה מניפוצליות כאלו ואחרות.
למידע נוסף - http://www.php.net/manual/en/pdostatement.bindparam.php
  Reply With Quote
ישן 27-04-12, 18:09   # 4
gillllll
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
הודעות: 363

gillllll לא מחובר  

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

> לגבי mysqli ן PDO נראה מעניין גם קראתי קצת על איך זה מתבצע , אבל האם אתה בטוח שיש הפרדה כי בסופו של דבר עדין משתמשים במשפט SQL חלקים ממנו פשוט עוברים עוד עיבוד לפי מה שמופיע בדוגמאות. אבל זה כל כך שונה ממה שאני מורגל אליו שאני מעדיף לא להכנס לזה כרגע מה גם שאני לא בטוח שהשרת יתמוך :/
__________________
- חייך הכל לטובה .
  Reply With Quote
ישן 28-04-12, 13:21   # 5
בניה
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: נחושה
הודעות: 3,434

בניה לא מחובר  

PREPARED STATEMENTS או DATA BINDING אלו השיטות שצריך לעבוד בהן.
זה ממש לא מסובך ולא צריך לפחד...
אם אתה רוצה להתקדם מקצועית, לך על זה.
  Reply With Quote
ישן 28-04-12, 13:57   # 6
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

נהיה כאן קצת סלט.

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

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

לדוג' - אם אתה קולט מהמשתמש ID של עמוד במטרה לשלוף אותו מהמסד, הבדיקה הראשונה והעיקרית שאתה צריך לעשות זה לוודא שהוא מספר (בהנחה שזה המצב, לצורך העניין זה כן), אחר כך אתה יכול גם להגדיל ראש ולוודא שהוא גדול מ- 0 ובסופו של דבר חשוב לוודא שבאמת קיימת רשומה עם ה- ID הזה במסד הנתונים.
אין שום סיבה לסנן אותו מתגיות HTML, אין שום סיבה להבריח בו כל מיני תווים כאלה ואחרים, זה מיותר וחסר תועלת, אין שום מספר שכולל בתוכו תווים כמו "<" או ";", אם היו - הוא לא היה מספר.
אותו רעיון גם לגבי ערך שניתן לצפות מראש (למשל שדות שאמורים לקבל "true" או "false"), לגבי ערכים עם תבנית מוגדרת (אך ורק אותיות באנגלית בטווח של A-Z) וכו'.


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


שיהיה בהצלחה.

Last edited by אדיר; 28-04-12 at 14:00..
  Reply With Quote
השב

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


חוקי פירסום
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. הזמן כעת הוא 21:15.

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