webForumDet fria alternativet

Säkerhet i mySQL?

PHP

39 svar · 3 791 visningar · startad av alioooop

Medlem sedan feb. 2008120 inlägg
Frågan#1

hej

håller på att försöka få min sida säker men hittar så många olika sätt men alla har sina negativa sidor.

då är min fråga, vad ska jag använda mig utav för funktion eller om jag ska skriva en ultimat egen funktion, hur ska den se ut?
såg även att vissa har &-tecken runt sina variabler som ska in i databasen, vad ger detta?

frågan har säkert ställts tusen ggr förr men hittade inte ett bra svar.

snälla hjälp :)

MVH alioooop

Medlem sedan aug. 20039 340 inlägg
#2

Jag gissar att du använder PHP?
Använd mysqli-interfacet med prepared statements så eliminerar du all risk för SQL-injektioner i ett svep.

Läs mer här: http://devzone.zend.com/article/686

Medlem sedan feb. 2008120 inlägg
#3

joo eftersom att min tråd ligger i php kategorin så använder jag php ;)

tack iaf ska kolla upp det där =)

Medlem sedan feb. 2008120 inlägg
#4

men den där beskriver ju endast läsning, vill ju kunna skriva säkert i tex forms osv :)

Medlem sedan feb. 20034 441 inlägg
#5

alioooop skrev:

men den där beskriver ju endast läsning, vill ju kunna skriva säkert i tex forms osv :)

Men då har du läst något annat, när jag kollar länken ovan hittar jag massor med information om hur man skriver till databasen, med prepared statements.

Medlem sedan feb. 2008120 inlägg
#6

MickeA.com skrev:

Men då har du läst något annat, när jag kollar länken ovan hittar jag massor med information om hur man skriver till databasen, med prepared statements.

fattar inte ett skit av det där! är det där det enda riktigt säkra sättet?

skulle du kunna beskriva lite med något exempel? =)

Medlem sedan feb. 2008120 inlägg
#7
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* execute prepared statement */
$stmt->execute();

printf("%d Row inserted.\n", $stmt->affected_rows);

/* close statement and connection */
$stmt->close();

/* Clean up table CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Row deleted.\n", $mysqli->affected_rows);

/* close connection */
$mysqli->close();
?>

hittade det här och den fattade jag, så man kan inte skriva in något i variablerna som kan manipulera databasen på något vis?

Medlem sedan maj 20012 237 inlägg
#8

alioooop skrev:

[PHP]
hittade det här och den fattade jag, så man kan inte skriva in något i variablerna som kan manipulera databasen på något vis?

Nej, så länge implementation (mysqli) i sig är säker (fast det är en helt annan sak det)

Annars så är det också trevligare att slippa pilla med fnuttarna (').

Medlem sedan feb. 2008120 inlägg
#9

men hur ska jag få den säker? det är det som är mitt problem, vet hur jag ska connecta men är rädd för sql injection

Medlem sedan feb. 20034 441 inlägg
#10

alioooop skrev:

fattar inte ett skit av det där! är det där det enda riktigt säkra sättet?

Nej, som det står i texten kan du använda det hederliga sättet med mysql_real_escape() också, men det står även att om du istället använder mysqli så kommer du bl.a. ner i storlek på frågorna . Just den biten handlar om att få lite bättre optimerad kod.

Medlem sedan feb. 20034 441 inlägg
#11

Sök! Sql injektion har tagit upp tusen gånger. Sök här i phpforumet t.ex. så kommer du hitta hur mycket information som helst.

Medlem sedan feb. 2008120 inlägg
#12

$albumName = mysql_real_escape_string($_POST['albumName']) ;

denna rad kod ger mig detta fel så därför kan jag inte använda det...

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'photocatwalk.com'@'srv20.one.com' (using password: NO) in /customers/photocatwalk.com/photocatwalk.com/httpd.www/make_album.php on line 35

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /customers/photocatwalk.com/photocatwalk.com/httpd.www/make_album.php on line 35

Medlem sedan maj 20012 237 inlägg
#13

mysql_real_escape_string() kräver en öppen anslutning till databasen.

har du öppnat en anslutning till databasen före du använde denna funktion och gav du ett lösenord också?

Medlem sedan feb. 2008120 inlägg
#14

jme skrev:

mysql_real_escape_string() kräver en öppen anslutning till databasen.

hur skapar man en öppen anslutning? :P

Medlem sedan feb. 2008120 inlägg
#15

faan jag är en idiot :P nu fattar jag

Medlem sedan aug. 20039 340 inlägg
#16

Men mysql_real_escape_string behöver du ju inte om du använder prepared statements. Det går ju att glömma mysql_real_escape_string och då är du plötsligt osäker igen. Om du däremot skriver om all din kod så att den använder prepared statements så är problemet ur världen.

Medlem sedan feb. 2008120 inlägg
#17

okej blir mkt att skriva om men det löser jag :)

Medlem sedan juni 20014 421 inlägg
#18

Ett bättre alternativ än att använda mysqli_* är att använda sig av PHP Data Objects (PDO) då detta bl.a är mer flexibelt i prepared statements, har stöd för fler databaser (lättare att byta databas om behovet skulle finnas).

En grundlig genomgång för PDO finns här (sidan är nere för tillfället, men den kommer nog upp snart igen):
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html
Den här artikel-serien är också bra:
http://www.phpeveryday.com/articles/PDO-Setting-Connection-Attributes-P544.html

Det har även skrivits en del om PDO på wF så en sökning bör ge dig en del träffar.

Medlem sedan feb. 2008120 inlägg
#19

colione skrev:

Ett bättre alternativ än att använda mysqli_* är att använda sig av PHP Data Objects (PDO) då detta bl.a är mer flexibelt i prepared statements, har stöd för fler databaser (lättare att byta databas om behovet skulle finnas).

En grundlig genomgång för PDO finns här (sidan är nere för tillfället, men den kommer nog upp snart igen):
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

Det har även skrivits en del om PDO på wF så en sökning bör ge dig en del träffar.

tack ska kolla sen när jag kommer hem. =)

Medlem sedan maj 20012 237 inlägg
#20

Jag rekommenderar också PDO.

253 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)