Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Opgelost] [PHP] Bepaalde tekens uit string filteren  (gelezen 2416 keer)

[Opgelost] [PHP] Bepaalde tekens uit string filteren
« Gepost op: 2009/10/08, 00:11:33 »
Ik ben bezig met het maken van een website waarop het mogelijk zal zijn om te registreren. Naar aanleiding van deze comic ben ik eens gaan testen of het me lukte om mijn eigen database om zeep te helpen. De tekens werden gewoon in de database ingevoerd, maar ik neem toch liever het zekere voor het onzekere en wil dus graag gevoelige tekens, zoals ; ' " ) eruit filteren.

str_replace leek mij hiervoor geschikt en dit werkt ook, in zekere zin.

$forbidden = array(";", "'", "\"", ")");
$filtered = str_replace($forbidden, "", $originele_string);

Het werkt dus in zekere, maar nog niet helemaal. De dubbele aanhalingstekens geven namelijk problemen. Als $originele_string namelijk als inhoud blablabla" heeft, wordt dit niet veranderd in blablabla, maar in blablabla\.

Heeft iemand een idee wat de beste methode is om deze tekens uit een string te filteren?
« Laatst bewerkt op: 2009/10/09, 19:13:13 door Linux-user »

Offline CRXDelSol

  • Lid
Re: [PHP] Bepaalde tekens uit string filteren
« Reactie #1 Gepost op: 2009/10/09, 15:32:32 »
Hetgeen wat jij bedoelt, "database om zeep helpen", heeft de benaming: SQL-Injection.
Oftewel, bepaalde tekens die in een SQL query gebruikt worden via invulveld direct te injecteren in een query.

Wat je ook kan doen, is mysql_real_escape_string() gebruiken.
Deze zorgt ervoor dat hetgeen je injecteerd in de query, wordt omgezet naar een veilig string.

Dit is bijvoorbeeld mijn query:

<?php
mysql_query
"INSERT INTO users SET username = '" $_POST'username' ] . "'" )
?>

Als je dan in het invulveld dingen gaat neer zetten als:

',

Dan ben je uit die query gebroken, en kan je daarachter die komma gewoon een nieuwe query plaatsen.
Maar als ik dit gebruik:

<?php
mysql_query
"INSERT INTO users SET username = '" mysql_real_escape_string$_POST'username' ] ) . "'" )
?>

Wordt die ', automatisch omgezet naar een SQL-safe string.
Dan kan je nooit uit die query breken, want wat je ook in die input veld invult, het wordt altijd na de tijd door PHP omgezet naar een veilige string, dus komt het ook netjes in de database te staan zoals je het hebt ingevuld in de input veld.

Hoop dat je wat hebt aan deze informatie.

Offline vanadium

  • Lid
Re: [PHP] Bepaalde tekens uit string filteren
« Reactie #2 Gepost op: 2009/10/09, 18:17:43 »
En kan het, in je originele aanpak, niet door eenvoudig de dubbele quote voor te stellen als '"' in plaats van "\"" ?

Re: [PHP] Bepaalde tekens uit string filteren
« Reactie #3 Gepost op: 2009/10/09, 19:12:46 »
Hetgeen wat jij bedoelt, "database om zeep helpen", heeft de benaming: SQL-Injection.
Oftewel, bepaalde tekens die in een SQL query gebruikt worden via invulveld direct te injecteren in een query.

Verhaal over mysql_real_escape_string()

Klopt. Daar was ik intussen via Google achter gekomen.

Het commando mysql_real_escape_string() had ik ook gevonden, maar ik maak geen gebruik van MySQL, maar van PostgreSQL. Hiervoor blijkt een soortgelijk commando te zijn, namelijk pg_escape_string(). Ik heb hiermee getest en dit werkt inderdaad.

Bedankt voor je hulp.

En kan het, in je originele aanpak, niet door eenvoudig de dubbele quote voor te stellen als '"' in plaats van "\"" ?

Dat dacht ik ook, maar dat bleek niet te werken. Het is mij tenminste niet gelukt om het op die manier werkend te krijgen.

Het probleem is nu in ieder geval opgelost, dus ik zal het topic op [Opgelost] zetten.