Za prvé, to, o čem to je, se nazývá SQL-Injection . Je to v podstatě jen možnost měnit dotazy na databázi pomocí uživatelského vstupu.
Podívejme se na příklad:
Dotaz:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Nyní přiřadíme VAR1 hodnotu:'; DROP TABLE *; --
A dostaneme:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Pomocí mysql_real_escape_string
vypadalo by to takto:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
'secures' řetězec pro použití v rámci dotazu.
Ale nakonec měli byste přestat používat mysql_*
celkem . Jsou zastaralé a považovány za nejisté, pokud jde o zabránění vkládání SQL nebo jiné způsoby temperování s dotazy.
Měli byste jednoduše přestat takto spojovat dotazy a začněte používat připravená prohlášení , které se nejen snadněji používají, ve výchozím nastavení zabraňují vkládání SQL, ale také mohou zlepšit rychlost vaší aplikace.
Pro PHP existují dvě rozšíření, která jsou navržena tak, aby uzavřela celý mysql_*
otevřeno:
A říkám to znovu:Přestaňte prosím používat mysql_*
!