Kom ihåg mig?
Home Menu

Menu


Apostrof i MySQL

 
Ämnesverktyg Visningsalternativ
Oläst 2012-02-22, 11:35 #1
Hellsings avatar
Hellsing Hellsing är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 194
Hellsing Hellsing är inte uppkopplad
Medlem
Hellsings avatar
 
Reg.datum: Aug 2007
Inlägg: 194
Standard Apostrof i MySQL

Hallo!

Jag använder preg_match på följande sätt:

Kod:
elseif(preg_match('/[^A-Za-z0-9!?_,.*:()+-= \r\n\'\"]/', $formcontent)) {
echo "Invalid characters";
}
Sedan lagrar jag innehållet med:
Kod:
mysql_query("INSERT INTO news (title, content)
VALUES
('$formtitle','$formcontent')");
Allt verkar fungera och jag kan lagra innehållet i min databas så länge jag inte använder mig av apostrofer. Hur skall jag göra för att kunna lagra även apostrofer i tabellen?
Hellsing är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-22, 11:38 #2
Pake Pake är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2006
Inlägg: 33
Pake Pake är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2006
Inlägg: 33
Titta på http://php.net/manual/en/function.my...ape-string.php
Pake är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-22, 11:43 #3
Hellsings avatar
Hellsing Hellsing är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 194
Hellsing Hellsing är inte uppkopplad
Medlem
Hellsings avatar
 
Reg.datum: Aug 2007
Inlägg: 194
När jag använder mysql_real_escape_string säger koden ifrån på "Invalid characters"
Hellsing är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-22, 11:46 #4
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Din preg_match-funktion är långt ifrån säker för att skydda din input.

mysql_real_escape_string tar inte bort några tecken. Den escapar tecken såsom apostrofer. Därmed kommer den stoppa med din preg_match trots att du faktiskt har en säker sträng att lägga in.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-22, 12:01 #5
Hellsings avatar
Hellsing Hellsing är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 194
Hellsing Hellsing är inte uppkopplad
Medlem
Hellsings avatar
 
Reg.datum: Aug 2007
Inlägg: 194
Tack!

Då plockar jag bort preg match och kör endast escape string.
Hellsing är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-22, 12:28 #6
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Precis som Clarence redan sagt så finns det ingen anledning att försöka göra en egen escape-funktion för MySQL då den redan finns i PHP. Däremot kan du ju fortfarande använda preg_match för att kontrollera otillåtna tecken då du uppenbarligen vill slippa exempelvis åäö.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-26, 00:42 #7
Dimme Dimme är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 397
Dimme Dimme är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 397
Om du använder mysql_real_escape_string($string) kom ihåg att anropa stripslashes($escapedString) när du hämta innehåll från databasen.

Annars kommer det du hämtar se ut så här:

Let\'s Eat istället för Let's Eat

Förresten, du borde läsa dig på MySQL injections, mysql_real_escape_string() löser en hel del men inte allt. Det går fortfarande att injecta en fråga som ser ut så här:

mysql_query("SELECT * FROM users WHERE name = $name");

Se till att alltid skriva dina frågor så här:

mysql_query("SELECT * FROM users WHERE name = '$name' ");

Och glöm inte escapa alla strängar och kasta om alla tal (T.ex. $id = (int)$_GET['id'];)
Dimme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-26, 07:52 #8
dAEks avatar
dAEk dAEk är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2006
Inlägg: 678
dAEk dAEk är inte uppkopplad
Mycket flitig postare
dAEks avatar
 
Reg.datum: Dec 2006
Inlägg: 678
Eller så kör man med prepared statements. Det ser ut som vanliga Sql-statements men med variabler, om man ska förklara skillnaden i bara en mening. Fördelen är att man slipper tänka på Sql-injections (fnuttar och dylika tecken) samt att man får andra fördelar som t.ex. att frågorna kan kompileras, cachas och optimeras av databasmotorn.

För PHP verkar det som att det mest använda ramverket som fixar detta är PDO. Jag är ingen PHP-snubbe så det kan ha ploppat upp nyare alternativ den senaste tiden.
dAEk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-26, 09:23 #9
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av Dimme Visa inlägg
Om du använder mysql_real_escape_string($string) kom ihåg att anropa stripslashes($escapedString) när du hämta innehåll från databasen.

Annars kommer det du hämtar se ut så här:

Let\'s Eat istället för Let's Eat
Nej, det stämmer inte alls. mysql_real_escape_string varken tar bort eller lägger till några tecken när strängen når databasen. Om du får den effekten så har du gjort någon annan formatering av texten eller så kör du med magic quotes vilket är smått antikt idag.
__________________
Full-stack developer, free for smaller assignments

Senast redigerad av tartareandesire den 2012-02-26 klockan 18:09
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-02-26, 16:00 #10
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av Dimme Visa inlägg
Om du använder mysql_real_escape_string($string) kom ihåg att anropa stripslashes($escapedString) när du hämta innehåll från databasen.

Annars kommer det du hämtar se ut så här:

Let\'s Eat istället för Let's Eat
Det stämmer, om du kör funktionen två gånger på samma sträng...
Clarence är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 02:25.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017