![]() |
[PHP] מה הייעוד של שני הפונקציות הבאות
PHP קוד:
|
mysql_escape_string - הוספת תווים לפני תווים מיוחדים.
mysql_real_escape_string - השמטת / החלפת תווים מיוחדים. לא בטוח, תמיד תוכל להסתכל באתר www.php.net |
הסתכלתי...
ואני גם לא בטוח... יהיה נכון להשתמש בייעוד שלהן ככה: mysql_real_escape_string($var); mysql_query("SELECT............. WHERE id=$val"); ואז...בשביל להוציא לפלט את הערך שהוא חיפש למשל... " ב" רגילאז נחליף את ה str_replace(""",""",$val); echo "נמצאו ..... תוצאות לערך'" . $val . "'"; |
זה לא טוב למערכות גדולות....אתה צריך פתרון יעיל.. שלא תצטרך להתעסק בקטנות כל הזמן
|
ציטוט:
לאחר החזרת התווים מהמסד יש משהו טוב שאפשר לעשות (הקוד לא שלי): PHP קוד:
|
טוב אז ככה, קודם כל בקובץ גלובלי עשיתי שיבדוק אם MEGIC QOUTES פעיל או לא
אם כן מסיר את כל הסלאשים שהחרא הזה הוסיף ואז שם אותו על 0 ini_set(magic_qoutes_runtime,0) משהו כזה - לא זוכר בדיוק, לאחר מכן עשיתי פונקציה שנקראת CLEAN שעובר על המערך ועושה MYSQL_REAL_ESCAPESTRING או את השני - לא זוכר כבר. וזהו בעת ההכנסה למסד לא הייתה לי בעיה ובעת ההוצאה מהמסד אין לי בעיה... וגם בדקתי עבור SQL INJECTION ואין עם זה שום בעיה |
ציטוט:
|
זה הכי פשוט שיש כי לדוגמא לפני שאילתה אני פשוט עושה
$_GET = clean($_GET) וזהו... זה בטוח מכל SQL INECJTION שתרצה |
מה הפונקציה clean עושה?
|
מגנה מפני SQL INJECTION בעזרת MYSQL_REAL_ESCAPE_STRING על כל אברי המערך
לפני שאילתה. יש כמובן עוד פונקציה שמבטלת את ההשפעה של magic_qoutes_runtime שאני מריץ אותה בכל מקרה לפני. |
אין כזאת פונקציה clean לפי PHP.NET ..
בקשר לשניה: http://il.php.net/manual/en/function...es-runtime.php http://il.php.net/manual/en/function...es-runtime.php אשמח אם תעזור לי להשתמש בהן . |
שוב, CLEAN זה פונקציה שאני בניתי שמריצה את הפונקציה MYSQL_REAL_ESCAPE_STRING
על כל איברי המערך. וככה מגינה מפני התקפות של SQL לפני הכנסה למסד הנתונים עכשיו לגבי MAGIC QOUTE אני אסביר, אפשרות זו היא אפשרות שנועדה למתכנתים מתחילים, בפשטות MAGIC QOUTES מוסיף סלאשים למשתנים הגלובלים , GET POST וכד'. בדומה ל ADDSLASS עכשיו, לא לכל שרת אפשרות זו פועלת, מה גם שאפשרות זו מאיטה את ה PHP לכן לא מומלץ להשתמש בה ובגלל זה רב השרתים לא מפעילים אותה. אבל אי אפשר לסמוך על זה לדוגמא, בניתי מערכת דיי גדולה, בסביבות ה 3 אלף שקל. ולא סידרתי את העיניין הזה (כן כולם עושים טעויות) ומה שקרה הוא שזה דפק את כל המערכת כשהבן אדם עבר שרת והייתי צריך להתחיל כמעט הכל מההתחלה בגלל הבאגים המרובים שזה גרם למערכת. לכן מאז בכל מערכת שאני בונה אני מוסיף בדיקה. כלומר אם MAGIC QOUTE פעיל...אז תעשה stripslashes לכל איברי המערכים של המשתנים הגלובלים וכמה שיותר מוקדם יותר טוב, לדוגמא אני משתמש בקובץ GLOBAL אז זה בין השורות הראשונות שאני שם. עכשיו מה שאתה צריך לעשות זה לבנות פונקציה שתעבור על המשתנים הגלובלים ותמחוק את הסלאשים ש MAGIC QOUTES יצר לאחר מכן להוסיף שורה אחת שתבטל את ה MAGIC QOUTE להמשך הסקריפט וככה אתה מבטל להמשך הסקריפט set_magic_quotes_runtime(0); @ini_set('magic_quotes_sybase', 0); עכשיו המלצה שלי - לא כל כך קשור לטרייד תעשה בדיקה דומה ל REGISTER GLOBAL אם לא הבנת משהו, תגיד בדיוק מה... |
את זה:
PHP קוד:
|
PHP קוד:
לבטל את האפשרות של MAGIC |
אז למה בכלל צריך את השורות האלו?
|
בשביל שהשרת לא ימשיך להתנהג ככה, כלומר אחרי שהפעלת את השורות האלה אז MAGIC QOUTES מכובה ואתה לא צריך לדאוג לגביו יותר, אבל הוא לא מכבה את זה באופן רטואקטיבי על המשתנים שכבר נוצרו
להזכירך SUPER GLOBALS נוצרים לפני שאתה נותן כל פקודה בכלל כלומר שלפני השורות האלה אתה תאלץ עדיין להתמודד עם השינוי ש GET ו POST וכל השאר עברו... יש מבין ? |
לא, וגם לא נראה לי שזה כל כך הכרחי להשתמש בזה.
|
חכה עד שתיפול במערכות גדולות, כמו שקרה לי...
|
כשאני אתכנת מערכת גדולה אתה תהיה הראשון לבדוק אותה :) . אוקיי?
|
כל הזמנים הם GMT +2. הזמן כעת הוא 17:12. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ