Cześć. W jaki sposób zabezpieczyć tekst pobierany z <textarea> przed atakami SQL Injection. Dodam, że w tym polu są tagi HTML więc np. kiedy zastosuje addshlashed to rozwali mi cały kod. Do podstawowych pól mogę używać ale co w tym przypadku?
ja na necie znalazłem taki kod:
#-#############################################
# Desc: escapes characters to be mysql ready
# Param: string
# returns: string
function escape($string) {
if(get_magic_quotes_runtime()) $string = stripslashes($string);
return @mysql_real_escape_string($string,$this->link_id);
}#-#escape()
wydaje mi się, że działa poprawnie. kod pochodzi stąd
http://www.ricocheting.com/code/php/mysql-database-class-wrapper
jest tu również cały wrapper do mysqla. trochę mało rozbudowany jest, ale już mu dorobiłem kilka funkcjonalności których mu brakowało
kod napisany bardzo przejrzyście także przyjemnie się go zmienia :)
Szczególnie opnięty mysql_real_escape_string, który w przypadku problemów z połączeniem do bazy danych zwróci FALSE (i w efekcie doda się pusty rekord) albo wykrzaczy skrypt.
to napisz jak to się powinno robić :P
Powinno się używać PDO lub własnej biblioteki do tego przeznaczonej. W ostateczności po prostu sprawdzić ifem, czy mysql_real_escape_string
nie zwrócił FALSE i obsłużyć jakoś ten błąd (np. rzucić wyjątek, co by się pusty rekord do bazy nie dodał).
a tak z ciekawości: z jakiej paki to niby miałoby zwrócić false? czemu nie mogę założyć że ta funkcja będzie po prostu działać?
Bo połączenie z serwerem MySQL się nie udało...
To ponoć skrajności, ale oprócz wymienionego w poście wyżej powodu, MySQL może po prostu wykitować w czasie wykonywania skryptu. I o ile to mało prawdopodobne przy 1 użytkowniku, to przy paru tysiącach już tak...
ale jak mysql wykituje to nie wykona się ani mysql_real_escape_string ani samo zapytanie, więc nie doda się pusty rekord do bazy i tak o to mało prawdopodobny problem nie istnieje. chyba że coś źle rozumiem