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

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   כמה שאלות עם שימוש בטבלאות (https://hosts.co.il/forums/showthread.php?t=72633)

Hezi & BomBas 18-03-09 18:51

ציטוט:

נכתב במקור על ידי The Chosen Generl (פרסם 703648)
תחליף בשורה הזו, מה זה הבלאגן שעשיתם לו שם:


מעבר לזה, אתה יכול לוודא שהid הוא מספרי, תעשה על ידי בהצלחה..

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

סניר (אני צודק?), קודם כל תוריד את הרווחים אחרי הגרש ('):
PHP קוד:

$query mysql_query("SELECT * FROM random_users WHERE id = '"$id ."' "); 

דבר שני, אתה לא יכול לעשות isset ואז לעשות השוואה. תוריד את ההשוואה מהתנאים, אתה לא צריך אותה.(תשאיר רק את ה ISSET)

ופה:
PHP קוד:

if (isset($_GET['update']) == $id) { 

תוריד את ה ISSET.

SniR-S 18-03-09 19:29

*שניר.
וכן, כרגע פחות חשוב האבטחה.
הורדתי רווחים, והורדתי את ISSET..
מה עכשיו?

intercooler3819 18-03-09 23:28

ציטוט:

נכתב במקור על ידי Hezi & BomBas (פרסם 703672)
לא חושב שמה שנתת לו יעזור לו, זה לפי דרך כתיבה.. לפי דעתי הדרך שלך פחות נוחה.
בקשר ל is_numeric - אתה צודק, אבל על אבטחה אנחנו לא מדברים עכשיו.

סניר (אני צודק?), קודם כל תוריד את הרווחים אחרי הגרש ('):
PHP קוד:

$query mysql_query("SELECT * FROM random_users WHERE id = '"$id ."' "); 

דבר שני, אתה לא יכול לעשות isset ואז לעשות השוואה. תוריד את ההשוואה מהתנאים, אתה לא צריך אותה.(תשאיר רק את ה ISSET)

ופה:
PHP קוד:

if (isset($_GET['update']) == $id) { 

תוריד את ה ISSET.

אני בטוח שהוא לא צריך הקסה או טווחים של אינטים שכוללים E
IS_NUMERIC הוא לא בדיוק השיא אבטחה למקרה הספציצי הזה

עדיף להשתמש ב
PHP קוד:

<?php
if(preg_match("#^[0-9]+$#"$str)) return TRUE;


AlmogBaku 19-03-09 00:34

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 703730)
אני בטוח שהוא לא צריך הקסה או טווחים של אינטים שכוללים E
IS_NUMERIC הוא לא בדיוק השיא אבטחה למקרה הספציצי הזה

עדיף להשתמש ב
PHP קוד:

<?php
if(preg_match("#^[0-9]+$#"$str)) return TRUE;


טיפשי לגמרי. זה אותו דבר.



ובכלל אני לא רואה סיבה למה לעבוד קשה על בדיקה כשאפשר להתעלם ממה ששגוי(intval למשתנה שרוצים להזין וחסל)

Daniel 19-03-09 16:04

אני לא מבין את שניכם, למה intval ולמה לנקות את כל מה שלא מספרים? הדוגמא הכי פשוטה, מה הבעייה עם SELECT field FROM table WHERE field1="'.mysql_real_escape_string($value).'" - דוגמא כדי להעביר את הרעיון.

SniR-S 19-03-09 16:08

סבבה לגמרי מה שאתם אומרים, כל אחד והשיטה שלו זאת שנוחה לו.
אבל אתם סטיתם לגמרי מהנושא.. :)

AlmogBaku 19-03-09 17:24

ציטוט:

נכתב במקור על ידי MasterT (פרסם 703798)
אני לא מבין את שניכם, למה intval ולמה לנקות את כל מה שלא מספרים? הדוגמא הכי פשוטה, מה הבעייה עם SELECT field FROM table WHERE field1="'.mysql_real_escape_string($value).'" - דוגמא כדי להעביר את הרעיון.

חחחחחחח למה?
כי זה מספר?!
אתה לא מכניס מספר עם גרשיים!

daMn 19-03-09 18:22

במקרה ואתה יודע שהקלט שלך הוא ערך מספרי משתמשים בהמרה (int) או לחילופין intval ואפשר גם בis_numeric על מנת לקבל ערך בוליאני בחזרה.
אין טעם להשתמש בregex, אני בטוח שהפונקציות שPHP איפשרו לנו יותר מהירות בregex.

Daniel 19-03-09 19:46

ציטוט:

נכתב במקור על ידי Baku (פרסם 703810)
חחחחחחח למה?
כי זה מספר?!
אתה לא מכניס מספר עם גרשיים!

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

ואתה יכול לתת לי סיבה למה לא לעשות את זה? MySQL עובד מצויין עם זה.

daMn 19-03-09 20:18

ציטוט:

נכתב במקור על ידי MasterT (פרסם 703841)
אני אודה לך אם את הדעות שלך תביע בצורה מכובדת - בין אם הן נכונות או לא.

ואתה יכול לתת לי סיבה למה לא לעשות את זה? MySQL עובד מצויין עם זה.

כי הרעיון שאתה רוצה שייכנס למסד ערך שהוא מספרי וmysql_real_esacape_string לא מונע מלהכניס סטרינג.

Daniel 19-03-09 20:31

ציטוט:

נכתב במקור על ידי daMn (פרסם 703857)
כי הרעיון שאתה רוצה שייכנס למסד ערך שהוא מספרי וmysql_real_esacape_string לא מונע מלהכניס סטרינג.

רגע רגע רגע, אנחנו מדברים כאן על SELECT או על UPDATE/INSERT ודומיהם?

daMn 19-03-09 20:50

ציטוט:

נכתב במקור על ידי MasterT (פרסם 703860)
רגע רגע רגע, אנחנו מדברים כאן על SELECT או על UPDATE/INSERT ודומיהם?

זה לא משנה.
לערך מספרי משתמשים בהמרה לערך מספרי לפני שימוש כלשהו בשאילתא.

Daniel 19-03-09 21:28

ציטוט:

נכתב במקור על ידי daMn (פרסם 703863)
זה לא משנה.
לערך מספרי משתמשים בהמרה לערך מספרי לפני שימוש כלשהו בשאילתא.

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

daMn 19-03-09 21:37

ציטוט:

נכתב במקור על ידי MasterT (פרסם 703871)
אפשר לדעת למה לפי דעתך הסיבה? יש כמובן את העניין של המשאבים, אבל אני לא רואה בה שום ערך נוסף בזה שלא נדבר שאפשר גם להתחיל להעביר כל הגדרה על סטרינג ל-' במקום " כי זה יחסוך לי עוד 0.00000001 שניות.

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

Daniel 19-03-09 22:22

ציטוט:

נכתב במקור על ידי daMn (פרסם 703874)
אם אתה אוהב לדפוק את הראש בקיר, תעשה את זה.
למה אתה חושב שPHP בנו את הפונקציות המרה למספר, למה להשתמש בפונקצית סינון סטרינג שהקלט הוא בכלל integer.
עזוב כרגע יעילות ומשאבים שהם לא לטובתך, יש פונקציות שבנויות לinteger ויש לstring וכו', בזמן שאתה לא בטוח מה הקלט אתה צודק, אבל אם אתה רוצה שהקלט יהיה מספר אז הוא יהיה מספר, נקודה.

אני מרגיש הרבה יותר בטוח כשיש לי קלאס שמיועד אך ורק לקבלת הפלט, העיבוד שלו, ושמירתו כמשתנה חדש $this->input, ויש לי עוד קלאס שמיועד לפעולות במסד - כאשר אני לא משתמש ב-$DB->query, אני משתמש רק ב-$DB->insert(array("name" => "value"), "table"); כאשר כמובן יש עוד אפשרויות לדברים יותר מתקדמים.

ואני יודע שאין סיכוי שמשהו רע יכנס - אני יודע גם ששום דבר רע לא יצא. שיכניסו לא רק אותיות, שיכניסו הכל - מה שהם רוצים. כל עוד זה לא עובד את ה-MAX QUERY SIZE - שיהיה להם בהצלחה. זה עבר? חבל, לא נכנס. ככה בעיניים עצומות אני יודע שאין שום בעייה.

איפה נוצרת הבעייה? כשאני מתעסק עם קודי מקור של אתרים. אז גם אז צריך לדעת מה לעשות. אגב, אם כבר מעלים את כל הדברים האלה,
http://www.nabble.com/The-PHP-filter...d22508904.html
משהו מעניין.

daMn 19-03-09 22:29

ציטוט:

נכתב במקור על ידי MasterT (פרסם 703880)
אני מרגיש הרבה יותר בטוח כשיש לי קלאס שמיועד אך ורק לקבלת הפלט, העיבוד שלו, ושמירתו כמשתנה חדש $this->input, ויש לי עוד קלאס שמיועד לפעולות במסד - כאשר אני לא משתמש ב-$DB->query, אני משתמש רק ב-$DB->insert(array("name" => "value"), "table"); כאשר כמובן יש עוד אפשרויות לדברים יותר מתקדמים.

ואני יודע שאין סיכוי שמשהו רע יכנס - אני יודע גם ששום דבר רע לא יצא. שיכניסו לא רק אותיות, שיכניסו הכל - מה שהם רוצים. כל עוד זה לא עובד את ה-MAX QUERY SIZE - שיהיה להם בהצלחה. זה עבר? חבל, לא נכנס. ככה בעיניים עצומות אני יודע שאין שום בעייה.

איפה נוצרת הבעייה? כשאני מתעסק עם קודי מקור של אתרים. אז גם אז צריך לדעת מה לעשות. אגב, אם כבר מעלים את כל הדברים האלה,
http://www.nabble.com/The-PHP-filter...d22508904.html
משהו מעניין.

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

$user_insert_data = array(
    
"gid" => intval($core->post['group']),
    
"fullname" => $db->escape_string($core->post['fullname']),
    
"username" => $db->escape_string($core->post['username']),
    
"email" => $db->escape_string($core->post['email']),
    
"password" => salt_password($core->post['password']),
    
"reg_time" => TIME_NOW
); 


Daniel 19-03-09 22:51

ציטוט:

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

$user_insert_data = array(
    
"gid" => intval($core->post['group']),
    
"fullname" => $db->escape_string($core->post['fullname']),
    
"username" => $db->escape_string($core->post['username']),
    
"email" => $db->escape_string($core->post['email']),
    
"password" => salt_password($core->post['password']),
    
"reg_time" => TIME_NOW
); 


אני מסנן על קל כלט לא משנה מה הוא. אם אני ארצה קלט שלא יעבור סינון, אני אגש אליו בעזרת $input->raw("value"); נכון שישמר עותק נוסף של המשתנה בתוך המחלקה $input, אני לא רואה בזה שום פסול.


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

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