webForumDet fria alternativet

magical_quote_gpc och säkerhet?

PHPur PHP

6 svar · 636 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

I stället för att sno någon annans tråd, lyfter jag ut frågeställningen till en egen...

colione i denna andra tråd skrev:

aasah i annan tråd skrev:

Om du skriver länken via en form, så är det säkert PHP:s magical_quotes_gpc som spökar. När denna är på (default) ser den till att skydda för elakt input från illvilliga användare. Visst löser fiddlers funktion problemet, men ev lite för bra. För du blir samtidigt av med skyddet för SQL Injections. :o

... men att förlita sig på mqg för att skydda sig från sql-injection är som att använda gladpack som kondom. Är inte mqg avstängt på din host som default bör du själv försöka stänga av det.

Vad gäller förlitandet på... Hm?

function secureFromForm($val) {
  if (!get_magic_quotes_gpc()) 
    return addslashes($val);
  else return $val;
	
}

Räcker inte detta? I så fall varför och hur gör man istället?

SPiNMedlem sedan mars 20007 896 inlägg
#2

PDO och prepared statements, eller mysql_real_escape_string()? :)

aasahMedlem sedan mars 20034 471 inlägg
#3

SPiN skrev:

PDO och prepared statements, eller mysql_real_escape_string()? :)

Varför räcker inte addslashes?

Och vad är PDO?

TulorkMedlem sedan aug. 2004903 inlägg
#4

Läs lite om PDO
http://se2.php.net/pdo

Anledningen till att många väljer PDO är kort sagt för att det är ett mycket säkrare alternativ att hantera sin databaskoppling på.

colioneMedlem sedan juni 20014 421 inlägg
#5

För att addslashes inte escapear all inkommande data säkert om den ska till mysql. Addslashes escapear bara ' " \ och NULL (0x1A) med ett backslash. Det finns andra vitala tecken i mysql som kan behöva escapeas som vagnretur, ny rad och kontrolltecken. Därför ska du inte förlita dig på addslashes som en säker metod för alla databaser.
Du ska istället använda den för din databas anpassade escapening och gärna den senaste versionen av det (alltså bättre att använda mysqli_* istället för mysql_*) eller helst av allt något som stöder prepared statements (PDO eller mysqli_* om du inte orkar sätta dig in i PDO). En liten brasklapp är att real_escape_string inte skyddar helt heller den missar att escapea tecken lite beroende på teckenkod och locale.

PDO är et grännssnitt för att kommunicera med det flesta databaser på samma sätt så att det bl.a blir lättare att skriva portabel kod. mysql-funktionerna funkar inte så där jättekanon mot en postgre-databas. Det finns en hel del skrivet om det här på wF även IBM och netevil.org har artiklar om det.

aasahMedlem sedan mars 20034 471 inlägg
#6

Tulork skrev:

Läs lite om PDO
http://se2.php.net/pdo

Aha... men jag sitter med PHP 4.x och då är inte PDO tillämpligt. Detsamma gäller prepared statements så vitt jag begriper.

Så i PHP 4.x med magic_quotes_gpc på är det

stripslashes();
mysql_real_escape_string();

som gäller? Eller?

Hur hämtas då värdena från databasen? Måste man inte "un-escape:a" dessa strängar för hand? :q

tantenMedlem sedan nov. 20051 596 inlägg
#7

En liten sidofråga bara...
Är det säkert att ditt webhotell inte kommer att uppgradera till 5:an.
Nu har all utveckling av 4:an stoppats och säkerhetsfixandet kommer det också vara stopp på i aug nästa år, och 6:an är på gång.
PDO eller mysqli är säkert men jag har sett att t.ex högskolor fortfarande lär ut sådant som detta.
Ur fysikums kurs... uppdateras dagligen...

mysqli_ (där det extra i:et lär betyda någondera av improved, interface, ingenious, incompatible eller incomplete; jag skulle vilja lägga till irriterande och idiotiskt för att beskriva den situation vi PHP-kodare försätts i när vi nu måste lära oss två olika uppsättningar databasfunktioner).

PDO nämns inte...
Något man knappt kan tro är sant att detta lärs ut i dag.
Men jag är ju så mycket nybörjare själv så jag ska väl inte säga för mycket... :-)
Men kolla med webhotellet... innan du fixar för mycket i det gamla... :)

138 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)