![]() |
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)) { Kod:
mysql_query("INSERT INTO news (title, content) |
|
När jag använder mysql_real_escape_string säger koden ifrån på "Invalid characters"
|
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. |
Tack!
Då plockar jag bort preg match och kör endast escape string. |
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 åäö.
|
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'];) |
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. |
Citat:
|
Citat:
|
Alla tider är GMT +2. Klockan är nu 21:48. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson