Hallo, GastEinloggen • Registrieren ] 1 User im IRC.  8 Gäste und 3 User online.  
Navigation

Technische News
13:42, 29.08.2010:
Update: phpMyAdmin 3.3.6
14:40, 20.08.2010:
Update: phpMyAdmin 3.3.5.1
21:44, 10.05.2010:
Update: phpMyAdmin 3.3.3
22:19, 15.04.2010:
Update: phpMyAdmin 3.3.2
10:52, 08.03.2010:
Update: phpMyAdmin 3.3.0

Statistiken
Threads: 2045
Posts: 26592
Benutzer: 564
Davon aktiv: 60
Besucher heute: 152
Besucher Monat: 1427
Meiste User auf einmal on:
52 am 12.03.2010, 02:24

Thread anschauen :: Php - Url kürzen

Mafiaforum
Will nach oben
Geschrieben am 05.07.2010 um 15:25 Uhr.
1 mal geändert. Zuletzt am 05.07.2010 um 19:02 von Valle.

Status: offline
Registriert: 15.09.2009
Beiträge: 64
Bits: 196,20
Geschlecht: männlich


Hallöchen,

wenn man sich dieses Code anguckt sieht man das es ein formular ist wo dateien in ne db geschrieben werden (logisch):D

Und dann wenn man dann auf abschicken klickt, werden die dateien reingeschrieben , aber es entsteht eine lange url und diese möchte ich verkürzen oder so, das man keine sieht ^^

PHP-Code:
if(@$_GET["action"]=="insert")
{
    $nick = htmlentities($_GET["nick"]);
    $nick2 = htmlentities($_GET["nick2"]);
    $conn = mysql_connect($host,$name,$pw);
    mysql_select_db($db,$conn);
    mysql_query("INSERT INTO mod_present (Nick,Nick2) VALUES ('".$nick."', '".$nick2."')",$conn);
    mysql_close($conn);
    echo "Du wurdest erfolgreich eingetragen";
} else {
    echo '<center><form action=./form.php method=get><input type=hidden name=action 
value=insert>Sein Nick: <br><input type="text" name=nick><br><br>Dein Nick: <br><input type="text" 
name=nick2><br><br><input type=submit value="Abschicken"></form>';
}



Kann mir jemand helfen ?

Mfg.: Mafia:D


massai
0.o
Geschrieben am 05.07.2010 um 16:02 Uhr.
5 mal geändert. Zuletzt am 06.07.2010 um 00:32 von massai.
Avatar von massai

Status: offline
Registriert: 23.07.2007
Beiträge: 1121
Bits: 11 226,40
Geschlecht: männlich


Erst einmal muss ich dich darauf hinweisen, dass dein Script anfällig gegen SQL-Injection Attacken ist. Und gegen Cross-Site-Request-Forgery.

Gegen SQL-Injection kannst du dich leicht schützen: Lass niemals die Eingaben des Users ungefiltert in die Datenbank. Benutze in diesem Fall die Funktion mysql_real_escape_string(), sonst kann jeder Befehle in der Datenbank ausführen.

Die URL soll am Ende also kürzer sein und wir wollen uns gegen CSRF schützen. Benutzen wir doch einfach POST anstatt GET. Es wird dich zwar nicht super vor CSRF schützen, aber ist auf jeden Fall schonmal besser als GET. Hier also die Variante mit POST:

PHP-Code:
if(!empty($_POST['nick']) && !empty($_POST['nick2'])) {
    $nick  = mysql_real_escape_string(htmlentities($_POST["nick"]));
    $nick2 = mysql_real_escape_string(htmlentities($_POST["nick2"]));
    
    $conn  = mysql_connect($host, $name, $pw);
    mysql_select_db($db, $conn);
    
    mysql_query("INSERT INTO mod_present (Nick, Nick2) VALUES ('".$nick."', '".$nick2."')", $conn);
    
    mysql_close($conn);
    echo "Du wurdest erfolgreich eingetragen";
} else {
    echo '<form style="text-align:center;" action="./form.php" method="post">Sein Nick: <br><input 
type="text" name="nick"><br><br>Dein Nick: <br><input type="text" name="nick2"><br><br><input 
type="submit" value="Abschicken"></form>';
}


Was mache ich anders?
1. Ich prüfe ob beide Felder mit Inhalt versehen sind, um rauszufinden ob das Formular abgesendet wurde, anstatt mich auf eine $_GET variable zu verlassen.
2. Ich filtere nicht nur HTML aus den Nicknames raus, sondern auch SQL Befehle (mysql_real_escape_string)
3. Unten im HTML (was ziemlich unsauber war;)) benutze ich erstmal style="text-align:center" anstatt dem veralteten <center> tag
4. method ist jetzt "post" in dem <form> Element

Edit: Achja, die CSRF Lücke. Das wird etwas schwerer, denn wir müssen ein Token (zufällige Zeichenfolge) generieren, dass wir in der Session speichern und im Formular verstecken (verstecktes input-feld), um es dann serverseitig wieder zu überprüfen. Ich baus gleich in das Script ein, wenn ich etwas Zeit finde.

Warum du dich gegen CSRF schützen solltest? Sonst kann man dir einfach nen Link zu ner Seite schicken, die ganz einfach neue Nicknames einträgt. Unter deiner IP und Session! Als ob du das gemacht hättest!

So, hier mit CSRF-Schutz:

PHP-Code:
<?php
session_start
();

// ... keine ahnung ob hier noch code ist, session_start() sollte aber schon ziemlich an den Anfang

if(!empty($_POST['nick']) && !empty($_POST['nick2'])) {
    if (
$_POST['token'] != $_SESSION['token']) {
        die(
'Bitte senden Sie das Formular erneut ab, der CSRF Schutz hat diesen Zugriff verhindert!');
    }

    
$nick  mysql_real_escape_string(htmlentities($_POST["nick"]));
    
$nick2 mysql_real_escape_string(htmlentities($_POST["nick2"]));
    
    
$conn  mysql_connect($host$name$pw);
    
mysql_select_db($db$conn);
    
    
mysql_query("INSERT INTO mod_present (Nick, Nick2) VALUES ('".$nick."', '".$nick2."')"$conn);
    
    
mysql_close($conn);
    echo 
"Du wurdest erfolgreich eingetragen";
} else {
    
// zufällige Zeichenfolge generieren... auch nicht perfekt aber sollte auf jeden Fall reichen ;)
    
$_SESSION['token'] = md5(uniqid(mt_rand(), true));

    echo 
'<form style="text-align:center;" action="./form.php" method="post"><input type="hidden" 
name="token" value="' 
$_SESSION['token'] . '">Sein Nick: <br><input type="text" name="nick">
<br><br>Dein Nick: <br><input type="text" name="nick2"><br><br><input type="submit" 
value="Abschicken"></form>'
;
}




 

Mafiaforum
Will nach oben
Geschrieben am 05.07.2010 um 16:22 Uhr.
1 mal geändert. Zuletzt am 05.07.2010 um 16:27 von Mafiaforum.

Status: offline
Registriert: 15.09.2009
Beiträge: 64
Bits: 196,20
Geschlecht: männlich


Okay,

ich bedanke mich für deine wirklich klasse Antwort (schön erklärt alles)

ich bin noch ziemlicher newbie und deswegen sind einige sicherheitslücken drinne.

Ich nehme den code so hin , echt klasse leistung;)

Und wenn du das dann noch eingebaut hast , mit dem CSRF, füge ich das dann hinzu.

Ich bin dir wirklich richtig dankbar, das du mir so weiterhelfen konntest .

Edit: Danke, für den zusatz. Ich werde es allerdings erst in 2-3 stunden testen können .

Echt geile hilfe hier;)<3


massai
0.o
Geschrieben am 05.07.2010 um 16:27 Uhr.
Avatar von massai

Status: offline
Registriert: 23.07.2007
Beiträge: 1121
Bits: 11 226,40
Geschlecht: männlich


So... ich habs oben in den Post reineditiert ... kannst du kopieren, den Code.

Ich hoffe, dass alles klappt. Wenn nicht, dann keine Angst, frag ruhig nach. Dafür ist das Forum ja da;)

 

Mafiaforum
Will nach oben
Geschrieben am 05.07.2010 um 19:28 Uhr.

Status: offline
Registriert: 15.09.2009
Beiträge: 64
Bits: 196,20
Geschlecht: männlich


Also ich hatte das jetzt eingefügt und beim aufrufen der seite kommt jetzt immer:

Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ')' in /srv/www/httpd/...../modmenue/form.php on line 17

hatte mit dem ) dann etwas rumgespielt ^^ aber der fehler bleibt.


Danke für die hilfe.


dominopage
Routinier
Geschrieben am 05.07.2010 um 19:49 Uhr.
Avatar von dominopage

Status: offline
Registriert: 16.10.2007
Beiträge: 707
Bits: 7 448,56
Geschlecht: männlich


Was ist Zeile 17 genau?
Der Fehler sagt eigentlich, dass irgendwo ein einzelnes kaufmännisches "Und" (&) steht, wo es nicht hingehört.

 
"When the '1' key on my old computer gave out I was not surprised"
Thomas Jech

Mafiaforum
Will nach oben
Geschrieben am 05.07.2010 um 19:50 Uhr.

Status: offline
Registriert: 15.09.2009
Beiträge: 64
Bits: 196,20
Geschlecht: männlich


zeile 17 ist genau das:

PHP-Code:
if(!empty($_POST['nick'] && !empty($_POST['nick2'])) {




dominopage
Routinier
Geschrieben am 05.07.2010 um 20:07 Uhr.
Avatar von dominopage

Status: offline
Registriert: 16.10.2007
Beiträge: 707
Bits: 7 448,56
Geschlecht: männlich


Es fehlt die schließende Klammer des ersten "!empty("

 
"When the '1' key on my old computer gave out I was not surprised"
Thomas Jech

Mafiaforum
Will nach oben
Geschrieben am 05.07.2010 um 21:12 Uhr.

Status: offline
Registriert: 15.09.2009
Beiträge: 64
Bits: 196,20
Geschlecht: männlich


Gut okay, geht;)


massai
0.o
Geschrieben am 06.07.2010 um 00:32 Uhr.
Avatar von massai

Status: offline
Registriert: 23.07.2007
Beiträge: 1121
Bits: 11 226,40
Geschlecht: männlich


jaja ich bin halt nicht perfekt:Pungetesteter code;)... danke dominopage

(ich habs zusätzlich oben reineditiert)

 

Thread anschauen :: Php - Url kürzen

Login
Name und Passwort:
Passwort vergessen?

Werbung






Copyright © 2007 - 2010 by iBitLive.eu

  Los!