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
39 svar · 3 791 visningar · startad av alioooop
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
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
joo eftersom att min tråd ligger i php kategorin så använder jag php ;)
tack iaf ska kolla upp det där =)
men den där beskriver ju endast läsning, vill ju kunna skriva säkert i tex forms osv :)
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.
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? =)
<?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?
[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 (').
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
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.
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.
$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
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å?
mysql_real_escape_string() kräver en öppen anslutning till databasen.
hur skapar man en öppen anslutning? :P
faan jag är en idiot :P nu fattar jag
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.
okej blir mkt att skriva om men det löser jag :)
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.
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.htmlDet 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. =)
Jag rekommenderar också PDO.