Prüf Formular.

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Spitzer

Mitglied
23 März 2020
51
0
6
21
Hay.

Ich habe nun mal folgendes gemacht:


1. MYSQL Seriennummer und Typ auf varchar mit max., 7 Zeichen- ( habe gelesen das man für einen Pfad am besten varchar nimmt mit max 65535 zeichen was meint ihr dazu?
2. vor mkdir eine variable für den pfad.

PHP:
<?php
/*#72*/    $db = new mysqli('localhost','root','','protokol');
/*#73*/    
/*#74*/    if($db->connect_error):
/*#75*/        echo 'Verbindung Fehlgeschlagen';
/*#76*/    endif;
/*#77*/    
/*#78*/    if(isset($_POST['submit'])):
/*#79*/        $seriennummer         = $_POST['Serial-number-Text'];
/*#80*/        $object             = $_POST['Object'];
/*#81*/        $user                 = $_POST['User'];
/*#82*/        $creator             = $_POST['Creator'];
            $upload                = "images/".$seriennummer.$object."/";             
/*#83*/
//verzeichnis generieren
/*#85*/        mkdir($upload);

/*#86*/
/*#87*/        $innenJpg            = $upload.$seriennummer."-Innen.jpg";
/*#88*/        $obenJpg            = $upload.$seriennummer."-oben.jpg";
/*#89*/        $steckerJpg            = $upload.$seriennummer."-stecker.jpg";
/*#90*/        $seriennummerJpg    = $upload.$seriennummer."-seriennummer.jpg";
/*#91*/        $deckelJpg            = $upload.$seriennummer."-deckel.jpg";
/*#92*/
//Bilder Upload
/*#94*/        move_uploaded_file($_FILES["inside-Img"]        ["tmp_name"], $innenJpg);
/*#95*/        move_uploaded_file($_FILES["top-Img"]            ["tmp_name"], $obenJpg);
/*#96*/        move_uploaded_file($_FILES["plug-legend-img"]    ["tmp_name"], $steckerJpg);
/*#97*/        move_uploaded_file($_FILES["Serial-number-Img"]    ["tmp_name"], $seriennummerJpg);
/*#98*/        move_uploaded_file($_FILES["Top-Bag-img"]        ["tmp_name"], $deckelJpg);
    //Absenden
/*#100*/    $absenden = $db->prepare("INSERT INTO `kontrolliert`(`serialnumber`, `type`, `controller`, `build`, `inside`, `top`, `stick`, `snumber`, `topbag`, `date`) Values (?,?,?,?,?,?,?,?,?,NOW())");
/*#101*/    $absenden->bind_param('iisssssss',$seriennummer,$object,$user,$creator,$innenJpg,$obenJpg,$steckerJpg,$seriennummerJpg,$deckelJpg); 
    

/*#104*/    $absenden->execute();

Dadurch hat sich auch meine error liste deutlich verkürtzt danke!


3. Habe ich gelesen wie das mit dem Kontext Wechsel gemeint ist, nun bin ich mir aber nicht sicher ob ich es richtig verstehe, ich muss alles was über Post reinkommt maskieren das keine eingegeben Zeichen den code beinflussen können stimmt das so?



MFG
 
Zuletzt bearbeitet:

m.scatello

Senior HTML'ler
15 Februar 2017
1.355
163
63
vor mkdir eine variable für den pfad.
PHP:
mkdir("images/$seriennummer-$object");

Und warum nutzt du die Variable an dieser Stelle nicht? Und auf das Minus-Zeichen bist du auch schon hingewiesen worden.
Du strapazierst die Geduld der Helfer, wenn du nicht mitdenkst und Hinweise ignorierst.
 

Spitzer

Mitglied
23 März 2020
51
0
6
21
Du musst auch richtig hinsehen!

"images/$seriennummer-$object");
"images/".$seriennummer.$object."/".$seriennummer."-Innen.jpg";

Fällt dir da nichts auf?


Hay, habe stunden lang angesehen und nun als ich die variable definiert habe ist es mir aufgefallen danke echt bist mein Held jetzt funktioniert es fast perfekt
 

Spitzer

Mitglied
23 März 2020
51
0
6
21
PHP:
mkdir("images/$seriennummer-$object");

Und warum nutzt du die Variable an dieser Stelle nicht? Und auf das Minus-Zeichen bist du auch schon hingewiesen worden.
Du strapazierst die Geduld der Helfer, wenn du nicht mitdenkst und Hinweise ignorierst.

hatte es in diesem moment gemerkt und bearbeitet du warst nur etwas zu schnell
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.355
163
63
Und Anführungszeichen um eine einzelne Variable (bei dir als zweiter Parameter von move_uploaded_file) waren schon immer Unsinn, keine Ahnung wo der Blödsinn her kommt …
Auch das hast du ignoriert!
PHP:
/*#85*/        mkdir("$upload");

/*#86*/
/*#87*/        $innenJpg            = $upload.$seriennummer."-Innen.jpg";
/*#88*/        $obenJpg            = $upload.$seriennummer."-oben.jpg";
/*#89*/        $steckerJpg            = $upload.$seriennummer."-stecker.jpg";
/*#90*/        $seriennummerJpg    = $upload.$seriennummer."-seriennummer.jpg";
/*#91*/        $deckelJpg            = $upload.$seriennummer."-deckel.jpg";
/*#92*/
//Bilder Upload
/*#94*/        move_uploaded_file($_FILES["inside-Img"]["tmp_name"], "$innenJpg");
/*#95*/        move_uploaded_file($_FILES["top-Img"]["tmp_name"], "$obenJpg");
/*#96*/        move_uploaded_file($_FILES["plug-legend-img"]["tmp_name"], "$steckerJpg");
/*#97*/        move_uploaded_file($_FILES["Serial-number-Img"]["tmp_name"], "$seriennummerJpg");
/*#98*/        move_uploaded_file($_FILES["Top-Bag-img"]["tmp_name"], "$deckelJpg");
 

Spitzer

Mitglied
23 März 2020
51
0
6
21
Auch das hast du ignoriert!
PHP:
/*#85*/        mkdir("$upload");

/*#86*/
/*#87*/        $innenJpg            = $upload.$seriennummer."-Innen.jpg";
/*#88*/        $obenJpg            = $upload.$seriennummer."-oben.jpg";
/*#89*/        $steckerJpg            = $upload.$seriennummer."-stecker.jpg";
/*#90*/        $seriennummerJpg    = $upload.$seriennummer."-seriennummer.jpg";
/*#91*/        $deckelJpg            = $upload.$seriennummer."-deckel.jpg";
/*#92*/
//Bilder Upload
/*#94*/        move_uploaded_file($_FILES["inside-Img"]["tmp_name"], "$innenJpg");
/*#95*/        move_uploaded_file($_FILES["top-Img"]["tmp_name"], "$obenJpg");
/*#96*/        move_uploaded_file($_FILES["plug-legend-img"]["tmp_name"], "$steckerJpg");
/*#97*/        move_uploaded_file($_FILES["Serial-number-Img"]["tmp_name"], "$seriennummerJpg");
/*#98*/        move_uploaded_file($_FILES["Top-Bag-img"]["tmp_name"], "$deckelJpg");[/
[/QUOTE]

Hay, wie gesagt arbeite ich daran ich habe mir eine to do liste gemacht was ich alles verbessern muss und welche fragen mir aufgekommen sind.

Ich habe daher bewusst vorhin punkte die ich bereits abgearbeitet habe aufgelistet.
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.355
163
63
Dann führe bitte alle Korrekturen durch, bevor du den Quellcode postest. Ansonsten sehen wir immer wieder die gleichen Macken, das macht keinen Sinn!
 

tk1234

Mitglied
2 September 2020
49
10
8
mkdir("$upload");
Die Anführungszeichen an dieser Stelle sind und bleiben Unsinn, das habe ich schon mal geschrieben!
3. Habe ich gelesen wie das mit dem Kontext Wechsel gemeint ist, nun bin ich mir aber nicht sicher ob ich es richtig verstehe, ich muss alles was über Post reinkommt maskieren das keine eingegeben Zeichen den code beinflussen können stimmt das so?
Nein, so ganz stimmt das nicht. Ja, du musst Daten die von außen kommen mit besonderer Vorsicht behandeln, in deinem Code musst du unbedingt noch "../" rausfiltern sonst kann man die Dateien sonst wo hin schreiben (sofern PHP da Schreibrechte hat).
Generell musst du aber immer wenn sich der Kontext von Daten ändert diese entsprechend behandeln: z.B. wenn du Daten in den HTML-Code ausgibst, musst du diese mit htmlspecialchars() behandeln damit z.B. <a> keinen Link erzeugt. Die Beispiele für verschiedene Kontextwechsel sind im zweiten Teil des von mir verlinkten Artikels auch ausführlich beschrieben.
 

Spitzer

Mitglied
23 März 2020
51
0
6
21
Die Anführungszeichen an dieser Stelle sind und bleiben Unsinn, das habe ich schon mal geschrieben!

Nein, so ganz stimmt das nicht. Ja, du musst Daten die von außen kommen mit besonderer Vorsicht behandeln, in deinem Code musst du unbedingt noch "../" rausfiltern sonst kann man die Dateien sonst wo hin schreiben (sofern PHP da Schreibrechte hat).
Generell musst du aber immer wenn sich der Kontext von Daten ändert diese entsprechend behandeln: z.B. wenn du Daten in den HTML-Code ausgibst, musst du diese mit htmlspecialchars() behandeln damit z.B. <a> keinen Link erzeugt. Die Beispiele für verschiedene Kontextwechsel sind im zweiten Teil des von mir verlinkten Artikels auch ausführlich beschrieben.


ööö die Anführungszeichen sind mittlerweile längst weg seit Post #85

achso dann muss ich nochmals lessem damke
 

Spitzer

Mitglied
23 März 2020
51
0
6
21
Hay.

Ich habe mich über den Kontext Wechsel informiert und mal probiert anzuwenden, hier mal mein Lösungsansatz:

Ich dachte mich folgendes:

Das inputfeld wird mit Infos gefüttert, anschliessend wird über Post das an mein Formular weitergeleitet und in der variabel $seriennummer gespeichert. Dann müsste es doch mit sinn machen nun die variabel nun mit dem real escape string zu maskieren. Ich hoffe ich habe nicht einen scheiss überlegt wäre mir echt peinlich.

PHP:
    $db = new mysqli('localhost','root','','protokol');
    
    if($db->connect_error):
        echo 'Verbindung Fehlgeschlagen';
    endif;
    
    if(isset($_POST['submit'])):
        $seriennummer         = $_POST['Serial-number-Text'];
        $object             = $_POST['Object'];
        $user                 = $_POST['User'];
        $creator             = $_POST['Creator'];
        $upload                = "images/".$seriennummer.$object."/";             
        
/*#85*/        $seriennummer=mysql_real_escape_string($db, $seriennummer);

nun bekomme ich allerdings diesen Fehler ausgegeben.

Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in C:\xampp\htdocs\taru\pages\test.php:85 Stack trace: #0 C:\xampp\htdocs\taru\index.php(11): require_once() #1 {main} thrown in C:\xampp\htdocs\taru\pages\test.php on line 85



MFG
 

tk1234

Mitglied
2 September 2020
49
10
8
$seriennummer=mysql_real_escape_string($db, $seriennummer);
Wie du ja gemerkt hast, gibt es die Funktion mysql_real_escape_string() nicht (mehr)[1]. Du verwendest mysqli, musst also natürlich auch die entsprechende Funktion dieser Erweiterung verwenden - da du aber objektorientiert arbeitest, muss es allerdings die entsprechende Methode der Klasse sein: $db->real_escape_string($var);

Aber: du brauchst die Funktion gar nicht da du prepared Statements verwendest und den Kontextwechsel damit ausreichend behandelt hast!

Was du allerdings immer noch nicht beachtest ist das potentielle Vorkommen von ../ in Variablen die in Pfaden/Dateinamen eingebaut werden …

[1] ich habe die Seite mal bearbeitet und die mysql_*-Funktionen komplett raus geworfen da die letzte Version, unter der die existiert haben, bereits seit bald zwei Jahren nicht mehr unterstützt wird.
 

Spitzer

Mitglied
23 März 2020
51
0
6
21
Was du allerdings immer noch nicht beachtest ist das potentielle Vorkommen von ../ in Variablen die in Pfaden/Dateinamen eingebaut werden …

Hay ganz Kurtz das ich richtig verstehe, du meinst das nicht jemand ins input Feld zb. sowas schreibt : 123/456 ; und der Code dann / als Verzeichnis anschaut stimmt das? und das gleiche mit .. weil dann ins vorherige Verzeichnis gewechselt wird?

das hätte ich so gelöst (funktioniert sogar hehe)

PHP:
$seriennummer         = str_replace(['+', '-'], '', filter_var($_POST['Serial-number-Text'], FILTER_SANITIZE_NUMBER_INT));
$object             = str_replace(['+', '-'], '', filter_var($_POST['Object'], FILTER_SANITIZE_NUMBER_INT));