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

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

Alon.R 13-07-06 01:19

[PHP] מה הייעוד של שני הפונקציות הבאות
 
PHP קוד:

mysql_real_escape_string
mysql_escape_string 

הבנתי שזה קשור ל mysql inj ולאבטחה כמובן... השאלה היא מה הייעוד שלהן? מה הן עושות וכיצד הן עוזרות... (השעה 2 וחצי ככה שאני לא ממש מצליח להבין..)

miniature 13-07-06 01:29

mysql_escape_string - הוספת תווים לפני תווים מיוחדים.
mysql_real_escape_string - השמטת / החלפת תווים מיוחדים.

לא בטוח, תמיד תוכל להסתכל באתר www.php.net

Alon.R 13-07-06 01:40

הסתכלתי...
ואני גם לא בטוח...
יהיה נכון להשתמש בייעוד שלהן ככה:

mysql_real_escape_string($var);

mysql_query("SELECT............. WHERE id=$val");

ואז...בשביל להוציא לפלט את הערך שהוא חיפש למשל...
&quot ב" רגילאז נחליף את ה

str_replace("&quot",""",$val);

echo "נמצאו ..... תוצאות לערך'" . $val . "'";

RS324 13-07-06 13:02

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

miniature 13-07-06 13:08

ציטוט:

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

ומהו?
לאחר החזרת התווים מהמסד יש משהו טוב שאפשר לעשות (הקוד לא שלי):
PHP קוד:

 function quote_smart($value

   
// Stripslashes 
   
if (get_magic_quotes_gpc()) { 
       
$value stripslashes($value); 
   } 
   
// Quote if not a number or a numeric string 
   
if (!is_numeric($value)) { 
       
$value "'" mysql_real_escape_string($value) . "'"
   } 
   return 
$value



RS324 13-07-06 13:13

טוב אז ככה, קודם כל בקובץ גלובלי עשיתי שיבדוק אם MEGIC QOUTES פעיל או לא
אם כן מסיר את כל הסלאשים שהחרא הזה הוסיף ואז שם אותו על 0
ini_set(magic_qoutes_runtime,0) משהו כזה - לא זוכר בדיוק,
לאחר מכן עשיתי פונקציה שנקראת CLEAN שעובר על המערך ועושה MYSQL_REAL_ESCAPESTRING או את השני - לא זוכר כבר.
וזהו בעת ההכנסה למסד לא הייתה לי בעיה
ובעת ההוצאה מהמסד אין לי בעיה... וגם בדקתי עבור SQL INJECTION ואין עם זה שום בעיה

miniature 13-07-06 13:31

ציטוט:

נכתב במקור על ידי RS324
טוב אז ככה, קודם כל בקובץ גלובלי עשיתי שיבדוק אם MEGIC QOUTES פעיל או לא
אם כן מסיר את כל הסלאשים שהחרא הזה הוסיף ואז שם אותו על 0
ini_set(magic_qoutes_runtime,0) משהו כזה - לא זוכר בדיוק,
לאחר מכן עשיתי פונקציה שנקראת CLEAN שעובר על המערך ועושה MYSQL_REAL_ESCAPESTRING או את השני - לא זוכר כבר.
וזהו בעת ההכנסה למסד לא הייתה לי בעיה
ובעת ההוצאה מהמסד אין לי בעיה... וגם בדקתי עבור SQL INJECTION ואין עם זה שום בעיה

אים משהו יותר פשוט? :-0

RS324 13-07-06 15:16

זה הכי פשוט שיש כי לדוגמא לפני שאילתה אני פשוט עושה
$_GET = clean($_GET)
וזהו... זה בטוח מכל SQL INECJTION שתרצה

miniature 13-07-06 15:38

מה הפונקציה clean עושה?

RS324 13-07-06 17:23

מגנה מפני SQL INJECTION בעזרת MYSQL_REAL_ESCAPE_STRING על כל אברי המערך
לפני שאילתה.

יש כמובן עוד פונקציה שמבטלת את ההשפעה של magic_qoutes_runtime שאני מריץ אותה בכל מקרה לפני.

miniature 13-07-06 18:14

אין כזאת פונקציה clean לפי PHP.NET ..
בקשר לשניה:
http://il.php.net/manual/en/function...es-runtime.php
http://il.php.net/manual/en/function...es-runtime.php

אשמח אם תעזור לי להשתמש בהן .

RS324 13-07-06 18:50

שוב, 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

אם לא הבנת משהו, תגיד בדיוק מה...

miniature 13-07-06 23:27

את זה:
PHP קוד:

set_magic_quotes_runtime(0);
@
ini_set('magic_quotes_sybase'0); 

לכתוב לפני / אחרי הוצאת הנתונים? ואיפה בדיוק?

RS324 14-07-06 00:11

PHP קוד:

<?php
set_magic_quotes_runtime
(0);
@
ini_set('magic_quotes_sybase'0); 


//rest of script here
?>

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

miniature 14-07-06 00:26

אז למה בכלל צריך את השורות האלו?

RS324 14-07-06 01:02

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

להזכירך SUPER GLOBALS נוצרים לפני שאתה נותן כל פקודה בכלל

כלומר שלפני השורות האלה אתה תאלץ עדיין להתמודד עם השינוי ש
GET ו POST וכל השאר עברו...
יש מבין ?

miniature 14-07-06 01:29

לא, וגם לא נראה לי שזה כל כך הכרחי להשתמש בזה.

RS324 14-07-06 12:29

חכה עד שתיפול במערכות גדולות, כמו שקרה לי...

miniature 14-07-06 17:20

כשאני אתכנת מערכת גדולה אתה תהיה הראשון לבדוק אותה :) . אוקיי?


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

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