3x kleine Fragen... :)

KD3

Erfahrenes Mitglied
hi leute...

1 Frage: Was bringt ein &= oder ein & in sachen php ?
2 Frage: Reicht mysql_real_escape_string allein für SQL Injections aus?
3 Frage: wenn ich z.B so ein include Befehl vollziehe, könnten dann LFI oder RFI Expl. von besuchern z.B angewendet werden:
<?php
$basep = $_SERVER['DOCUMENT_ROOT'];

include($basep . "/dir1/inc/db.inc.php);

?>

Danke im voraus

MfG
KD3
 
Zu 1:
Damit referenzierst du etwas, siehe auch hier:
http://de2.php.net/manual/de/language.references.php

Zu 2:
Grundsätzlich ja.
Allerdings solltest du z. B. bei Integer z. B. noch [phpf]intval[/phpf] benutzen und ggf. für dich relevante Sachen ausdünnen, wie z. B. HTML Tags filtern ([phpf]strip_tags[/phpf]) oder nur alle HTML Zeichen ersetzen ([phpf]htmlspecialchars[/phpf]).

Zu 3:

Dieses Beispiel kann überhaupt nicht verändert werden, da es absolut ist. Die Lücken die du ansprichst entstehen z. B. bei folgendem Code:

PHP:
$page = $_GET['page']

include($page);
Wenn in diesem Falle z. B. allow_url_fopen an wäre (was es eigentlich nicht sein sollte), könnte ein potenzieller Angreifer eine externe PHP Datei einbinden und seinen Code ausführen um an private Daten heranzukommen, wie z. B. MySQL Zugangsdaten.
Hier ist ein sicheres Beispiel:
PHP:
$page = $_GET['page'];

switch($page) {
  case "news":
    include("news.php");
    break;
  case "bla":
    include("bla.php");
    break;
  default:
    include("startseite.php");
}
Dadurch wäre es egal, wenn der Angreifer z. B. eine externe Datei angibt, da jeder unbekannte Fall einfach auf den default Case zeigt.
 
ok... die 2. und 3. Frage hab ich allmählich gepallt, danke :D nur die 1. nicht so ganz...

Ist & sowie ein . ? also ein Verknüpfungsoperator nur?

bsp.

<?php

$h = "Hallo";
$h .= "KD3";

echo $h;


?>
 
Nein ist es nicht, hier mal ein Beispiel:

PHP:
<pre>
<?php
$a = 4;
$b = $a;

# $a und $b wären jetzt 4

$a = $a + 9;

# $a = 13, $b = 4



echo $a."\n";
echo $b."\n";

## Jetzt das ganze als Referenz

$a = 4;
$b = &$a;

# $a ist 4, $b ist jetzt auch 4, aber nur weil er auf $a referenziert, er wird immer den
# gleichen Wert haben wie $a

$a = $a + 9;

echo $a."\n";
echo $b;

?>
</pre>
 
achso... also man könnte sagen dann wird immer der wert 4, konstant $b übergeben ne?
 
Nein, dass bedeutet, dass $b eigentlich keinen Inhalt hat, sondern immer den Wert von $a bezieht.
$b ist also ein Alias für $a.

php.net hat gesagt.:
Referenzen sind in PHP ein Mechanismus um verschiedene Namen für den gleichen Inhalt von Variablen zu ermöglichen. Sie sind nicht mit Zeigern in C zu vergleichen, sondern Aliasdefinitionen für die Symboltabelle. PHP unterscheidet zwischen Variablenname und Variableninhalt, wobei der gleiche Variableninhalt unterschiedliche Namen besitzen kann. Der bestmögliche Vergleich ist der mit Dateinamen und Dateien im Dateisystem von Unix - Variablennamen sind Verzeichniseinträge, während der Variableninhalt die eigentliche Datei darstellt. Referenzen können nun als Hardlinks im Dateisystem verstanden werden.
 
Also wird nur immer der Inhalt einer Variablen übernommen aber die kopie sagen wir mal von der variablen die angegeben wurde... oder?
 
Nein, es wird nichts übernommen und es wird auch keine Kopie erstellt.

$b zeigt immer auf den Inhalt von $a.

PHP:
$a = 4;
$b = &$a;

# $a = 4, $b zeigt auf $a also 4

$a = $a + 12;

# $a = 16, $b zeigt auf $a also 16

$a = $a - 5;

# $a = 11, $b zeigt auf $a also 11
 
Zurück