המרת נתונים (php) כדי להכניס לpostgreSql
-
הרשיתי לעצמי לחפש בגוגל, בגלל שידעתי שיש לזה פונקציה מוכנה עבור mysql, הנחתי שיש גם משהו לpostgres
הרי לך:
https://www.php.net/manual/en/function.pg-escape-literal.php -
@chagold כתב בהמרת נתונים (php) כדי להכניס לpostgreSql:
אני צריך להכניס נתונים שכוללים כל מיני תוים, ל-postgreSql, והנתונים כוללים תוים כגון גרש ('), וא"א להכניס את הנתונים (כיון שהPHP דורש - למניעת הזרקה - שהנתונים יהיו מסומנים בגרשיים (הפתרון של JSON לא מועיל לזה).
הסיפור משונה, וגם בנושא הקודם לא באמת ירדתי לסוף הבעיה.
תוכל לפרוס פה תמונה של מקרה מלא, או לתת קוד של דוגמה (מהקבלה של הקלט מאנשהו עד להכנסה למסד שזורק שגיאה)?
כמובן תוכל להביא קוד מצומצם שממחיש רק את הבעיה. -
@dovid כתב בהמרת נתונים (php) כדי להכניס לpostgreSql:
@chagold כתב בהמרת נתונים (php) כדי להכניס לpostgreSql:
אני צריך להכניס נתונים שכוללים כל מיני תוים, ל-postgreSql, והנתונים כוללים תוים כגון גרש ('), וא"א להכניס את הנתונים (כיון שהPHP דורש - למניעת הזרקה - שהנתונים יהיו מסומנים בגרשיים (הפתרון של JSON לא מועיל לזה).
הסיפור משונה, וגם בנושא הקודם לא באמת ירדתי לסוף הבעיה.
תוכל לפרוס פה תמונה של מקרה מלא, או לתת קוד של דוגמה (מהקבלה של הקלט מאנשהו עד להכנסה למסד שזורק שגיאה)?
כמובן תוכל להביא קוד מצומצם שממחיש רק את הבעיה.לקליינט יש דף להזנת נתונים: שם, כתובת וכיו"ב
והוא כותב בשםר' משה
והוא גר ברמה ג'
וכשאני מכניס את זה למסד נתונים אני מקבל שגיאה בסגנון הזהWarning: pg_query(): Query failed: ERROR: syntax error at or near "משה" LINE 5: content = '<p>ר' משה</p>' ^ in C:\xampp\texts.php on line 99
הפונקציה ש@חגי הביא הועילה.
-
@יוסף-בן-שמעון כתב בהמרת נתונים (php) כדי להכניס לpostgreSql:
@chagold מה יקרה אם הקליינט יכתוב בשדה כך:
משה'; DROP TABLE users //
?
בדקתי. הוא לא מחק.
אבל האמת, אני צריך לעבור קורס בנושא הזרקות. -
@chagold כתב בהמרת נתונים (php) כדי להכניס לpostgreSql:
אבל האמת, אני צריך לעבור קורס בנושא הזרקות.
לא חייב, זה יכול לתרום אבל זה לא הכרחי, מה שחשוב זה להקפיד לא לסמוך על המשתמש בשום דבר, לא לקבל ממנו שום קלט בלי לטהר אותו לפני כן, אם אתה בונה שאילתה אל תשרשר את הקלט לתוך השאילתה, אלא תשתמש בכלים של טיהור וחיטוי
-
@יוסף-בן-שמעון טוב להשתמש בפונקציה הנ"ל לכל קלט?
-
@chagold כל טקסט דינמי שהופך/שיכול להפוך לפקודה, חובה שיעבור טיהור.
לכן בפקודת SQL כל החלקים המשתנים, יש להעביר אותם בפונקציה או להשתמש בפרמטריזציה:$result = pg_query_params($dbconn, 'SELECT * FROM shops WHERE name = $1', array("ר' משה"));
דוגמה נוספת לטקסט שהופך לפקודה הוא כל מה שמגיע לHTML, למשל אם יש לך אפשרות למשתמש להוסיף תוכן טקסטואלי שלאחמ"כ יוצג בדף (זה יכול להיות שם קובץ/תגובה/הערה/מספר!) זה בעצם טקסט שיכול להפוך לפקודה (כי בHTML ניתן לכתוב SCRIPT שבעצם יכול בעקיפין לקבל שליטה על שרת שלם ויותר).