Първо, това, за което става дума, се нарича SQL-Injection . По същество това е просто възможността за промяна на заявки към базата данни чрез въвеждане от потребителя.
Нека разгледаме пример:
Запитване:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Сега ще присвоим VAR1 стойността на:'; DROP TABLE *; --
И ще получим:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
С mysql_real_escape_string
ще изглежда така:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
'обезопасява' низ за използване в рамките на заявка.
Но в крайна сметка, трябва да спрете да използвате mysql_*
като цяло . Те са отхвърлени и се считат за несигурни, когато става въпрос за предотвратяване на SQL инжектиране или други средства за овладяване на заявките.
Трябва просто да спрете да свързвате заявки заедно по този начин и започнете да използвате подготвени отчети , които не само са по-лесни за използване, предотвратяват SQL инжектирането по подразбиране, но също така могат да подобрят скоростта на вашето приложение.
За PHP има две разширения, които са предназначени да затварят целия mysql_*
отворен:
И пак го казвам:Моля, спрете да използвате mysql_*
!