04-08-09, 22:19 | # 1 |
חבר מתקדם
|
אבטחת מידע, 2 שאלות וקצת עזרה
דבר ראשון, איך אני יכול לעשות שיהיה במשתה מסויים רק מספר ולא טקסט? (URL הזרקות)
דבר שני, איך אתם מאבטחים? עם איזה שיטות אתם עובדים נגד הזרקות? אתם מסננים מילות SQL ? \: אשמח לקבל קצת מידע לגבי זהתוה |
04-08-09, 22:40 | # 2 |
חבר מתקדם
|
אם אתה רוצה לעשות משתנה מסויים רק מספר, זה לא אפשרי בPHP.
מה שכן, עם PHP 5 אתה יכול לסנן טיפוסים של ארגומנטים שמועברים לפונקציה, זה נקרא Type Hinting. למשל אתה יכול ליצור פונקציה כזו: קוד:
function setNum(int $value) { global $num ; $num = $value ; } קוד:
setNum("this is a string") // תחזיר שגיאה $int = 32; setNum($int) // לא תחזיר שגיאה, כי הארגומנט הוא 32 (טיפוס = מספר שלם = int / integer ) דרך נוספת לעשות את זה, זה עם ביטויים רגולרים, אבל אין צורך. בכל מקרה, בPHP לפי מה שאני בדקתי בכמה ממשקים של מסדי נתונים, יש בהם פונקציה שנקראת real_escape_string, למשל, אם אתה משתמש במסד mysql, אתה יכול להשתמש בפונקציה הזאתי שתטפל בתווים האסורים בשאילתה שלך: mysql_real_escape_string. אם אתה רוצה פונקציה שלא דורשת עבודה עם מסד נתונים מסויים, אז קח: קוד:
function real_escape_string( $unescaped_string ) { $prepend_chars = array() ; $prepend_chars["\\\x00"] = "\x00" ; $prepend_chars["\\\n"] = "\n" ; $prepend_chars["\\\r"] = "\r" ; $prepend_chars['\\\''] = "'" ; $prepend_chars["\\\""] = "\"" ; $prepend_chars["\\\x1a"] = "\x1a" ; foreach( $prepend_chars as $key => $value ) $unescaped_string = str_replace( $value, $key, $unescaped_string ) ; return $unescaped_string ; } Last edited by Shillo; 04-08-09 at 22:43.. |
05-08-09, 09:22 | # 3 |
חבר מתקדם
|
שאלה, לכל משתנה שנשלח לשאילתא אני אמור להצמיד הפונקציה mysql_real_escape_string ?
ומה עם שאילתות שאני מוציא? (שולח מהשרת למשתמש) אגב לא הבנתי כ"כ את הפונקציה, הבנתי שהיא מסננת ירידת / שבירת שורה מספרים הקסדצימלים, גרש וגרשיים מה זה אבל x1a ?, ואיך אני משתמש בה? בצורה הזו זה בסדר?: PHP קוד:
|
05-08-09, 09:47 | # 4 |
חבר בקהילה
|
בקשר לשאלה הראשונה, במקום שיזרוק שגיאה..
אתה יכול לבדוק עם הפונקציה הזאת אם המשתנה מכיל רק מספרים: http://il.php.net/manual/en/function.is-numeric.php בהצלחה |
05-08-09, 12:06 | # 5 | |
חבר מתקדם
|
ציטוט:
בקשר לקוד שכתבת, אם תכתוב רק real_escape_string($name); זה לא טוב, כי הפונקציה לא עובדת עם רפרנס והיא רק מחזירה ערך, זאת אומרת שאתה צריך לעבוד בצורה כזו: קוד:
// סתם דוגמא, אתה יכול לשים פה מה שאתה רוצה $name = $_GET['name']; // אם אתה משתמש בפונקציה שלי $name = real_escape_string($name); |
|
07-08-09, 09:26 | # 6 |
חבר מתקדם
|
אקי, נגיד שזה בסדר עד עכשיו, אבל אני רוצה לאבטח הזרקות GET
לדוגמא אם יהיה במשתנה מסויים תו מסוכן הוא יפנה ישר לעמוד מסויים או יסנן אותו משהו כזה. אני לא מצליח להכניס את הפונקציה mysql_real_escape_string למשתנה GET זתומרת, זה לא מועיל היא לא עושה כלום ? אני רוצה שלא יוכלו לפצל לי את השאילתא ובכלל לא לשלוח שאילתות במשתנים לסנן את התווים שלהם ומילות שמורות.. |
07-08-09, 09:39 | # 7 |
חבר וותיק
|
בנוגע למספרים
אתה יכול לקבל גם מספר שכולל את האות E ואני מניח שזה קצת גדול עליך ולא תכננת שיעבירו בכתובת.. זה היה עובר את הפונקציה של שילה אבל לא את זו: PHP קוד:
__________________
|
07-08-09, 13:31 | # 8 | |
Авторитет
|
אגב, טיפ קטן.. אם יש לך שדה במסד שאתה יודע שהוא צריך להיות ערך מספרי בלבד - אז כבר במסד הנתונים שים אותו מסוג INT.
__________________
ציטוט:
|
|
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|