# SICHERHEIT real_escape_string



## ben78 (20. Januar 2010)

```
mysql_real_escape_string()
```



Ich habe mich mal etwas rumgegoogelt, aber nicht erwünschtes Ergebnis gefunden. 

Meine Frage - für Euch vielleicht blöde Frage - lautet, ob der obenstehende Code nur Sinnvoll ist, wenn man eine Seite hat wo sich User einloggen bzw. registrieren können. 

Oder ist er in Sachen Sicherheit für jede Seite gedacht, die mit MySQL in Verbindung steht. 


Ich stelle vielleicht blöde Fragen, hat aber damit zu tun, dass ich mir nicht sicher bin und in sachen php noch ganz ganz frisch bin.


----------



## CPoly (21. Januar 2010)

Die Funktion ist für jegliche Anwendung mit Datenbankanbindung relevant. Vor allem dann, wenn Daten von Außen, z.B. Nutzereingaben, in einem Query vorkommen.


----------



## Sven Mintel (21. Januar 2010)

Irgendwie kommen ja alle Daten von Aussen.
Von der Seite aus gesehen: Freunde machen Fehler, Feinde machen Böses,
MySQL macht da keinen Unterschied und die Funktion schützt gegen Beides


----------



## bofh1337 (21. Januar 2010)

Fraglich ist doch hierbei auch, ob es sich nicht eher um "Augenwischerei" handelt, wenn User in falscher Sicherheit gewogen werden 

Beim Einfügen in die Datenbank wird mit einem Cross-Site-Scripting wohl nicht viel passieren....aber was passiert mit dem Script, wenn es aus der DB gelesen und auf der Webseite angezeigt wird?

Da lege ich doch mehr wert auf htmlentities bzw


----------



## ben78 (21. Januar 2010)

Ich versuche schon seit 4,5 Stunden diesen Code in mein PHP Script einzubetten. Aber jedes Mal bekomme ich bzgl. des Codes eine Warning...Unknown Meldung. Kann mir        B I T T E      einer von Euch posten an welcher Stelle im Script der Code eingebettet gehört.


```
mysql_real_escape_string($user),
mysql_real_escape_string($password));
```

Und jetzt die dümmste Frage, die ich hier stellen kann. Aber ich genieße ja noch Anfängerbonus...hehehe

In den Klammern kommt einmal $user und einmal $password vor. Bezieht sich das auf die bzw. meine Login Daten meiner MySQL-DB oder auf die User die sich auf der Seite anmelden können anmelden können?

UND

Wofür steht folgender Code? Er soll sehr wichtig für die Sicherheit sein.


```
require mysql_real_escape_string($site);
```


----------



## SilentWarrior (21. Januar 2010)

ben78 hat gesagt.:


> Ich versuche schon seit 4,5 Stunden diesen Code in mein PHP Script einzubetten. Aber jedes Mal bekomme ich bzgl. des Codes eine Warning...Unknown Meldung. Kann mir        B I T T E      einer von Euch posten an welcher Stelle im Script der Code eingebettet gehört.
> 
> 
> ```
> ...


Zunächst einmal ist mir etwas schleierhaft, wieso du keinen Syntax-Error kriegst. Korrekt müsste das meines Erachtens z.B. so aussehen:


```
$u = mysql_real_escape_string($user);
$pw = mysql_real_escape_string($password);
```


Wichtig ist hierbei vor allem, dass _bereits eine Verbindung zur Datenbank_ bestehen muss, damit mysql_real_escape_string auch funktioniert.



ben78 hat gesagt.:


> In den Klammern kommt einmal $user und einmal $password vor. Bezieht sich das auf die bzw. meine Login Daten meiner MySQL-DB oder auf die User die sich auf der Seite anmelden können anmelden können?


$user und $password sind Daten, die der Benutzer auf deiner Website in ein (Login-)Formular eingegeben hat, werden also höchstwahrscheinlich aus $_POST['user'] und $_POST['password' kommen. Mit den Login-Daten für die MySQL-DB hat das nichts zu tun, die wirst du ja höchstwahrscheinlich ohnehin nur in phpMyAdmin eingeben, und das schaut schon selbst, dass es sicher ist. 



ben78 hat gesagt.:


> Wofür steht folgender Code? Er soll sehr wichtig für die Sicherheit sein.
> 
> 
> ```
> ...


Da bin ich überfragt. Auch in der Funktionsreferenz zu [phpf]mysql_real_escape_string[/phpf] findet sich nirgendwo ein require.


----------



## rd4eva (21. Januar 2010)

```
require mysql_real_escape_string($site);
```

Was das sein soll ist mir ein Rätsel.
require unterscheidet sich nur geringfügig von include und in beiden Fällen wird eine Datei und keine Funktion o.ä. inkludiert.
Folglich macht das nicht im entferntesten Sinn.



> Zunächst einmal ist mir etwas schleierhaft, wieso du keinen Syntax-Error kriegst. Korrekt müsste das meines Erachtens z.B. so aussehen:
> 
> ```
> $u = mysql_real_escape_string($user);
> ...



Das stimmt nur bedingt. Ich glaube er hat die zwei Zeilen nur etwas aus dem Kontext gerissen.
Das Beispiel auf der PHP Seite enthält genau diese Zeilen und da ist es dann logischerweise auch erlaubt.

Hier das Beispiel

```
<?php
// Verbindung herstellen
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    OR die(mysql_error());

// Anfrage erstellen
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
?>
```


----------



## ben78 (21. Januar 2010)

> Irgendwie kommen ja alle Daten von Aussen.
> Von der Seite aus gesehen: Freunde machen Fehler, Feinde machen Böses,
> MySQL macht da keinen Unterschied und die Funktion schützt gegen Beides





Bei meinem Projekt können sich keine User anmelden und registrieren. Das einzige, wofür ich meine MySQL-DB brauche, sind CSV Datein mit Datensätze eines Kunden, die in einer MySQL-Tabelle gespeichert und per PHP als HTML ausgelesen werden sollen. User können dann in Form von Sucheingaben nach Datensätze suchen.

Also benötige ich doch folgenden Code NICHT für meine Website?

```
mysql_real_escape_string($user)
mysql_real_escape_string($password)
```

Ich habe folgenden Zeile in meinem PHP Script:


```
$sql = "SELECT * FROM meineTabelle";
```

Eine Verbindung zur DB steht auch. Jetzt meine Frage:
An welcher Stelle im Script muss folgender Code impletiert werden und was kommt in die Klammern?

```
mysql_real_escape_string()
```


----------



## CPoly (21. Januar 2010)

ben78 hat gesagt.:


> User können dann in Form von Sucheingaben nach Datensätze suchen.



Um die Sucheingaben muss ein mysql_real_escape_string(). Denn selbst wenn der Nutzer nichts böses will, müssen manche Sonderzeichen eben escaped werden.


----------



## ben78 (21. Januar 2010)

D. h. also, dass ich dann bei meinem Zweck mit einem real_escape_string um die Sucheingaben ausreichenden Schutz in Sachen php und mysql genieße?


----------

