2 Antworten

$search = $bdd->query("SELECT * FROM con WHERE id=".$_GET['id']);

Niemals Nutzereingaben direkt in SQL Queries schreiben, sondern vorher immer escapen / filtern. Bei deinem aktuellen Code (und einer bescheidenen Datenbankkonfiguration) könnte ich das hier machen:

https//deineseite.de/skript.php?id=1; DROP TABLE con;

Und damit deine ganze con-Datenbank löschen, da die SQL Query dann so aussieht:

SELECT * FROM con WHERE id=1; DROP TABLE con;

Am besten ist, es PDO / Prepared Statements zu verwenden, da können dir solche Fehler normalerweise nicht passieren. Wenn das keine Option ist, verwende in PHP mysqli_real_escape_string um alle Nutzereingaben vorher zu escapen. Vor Zeile 41 also das hier packen:

$id = $bdd->real_escape_string($_GET['id']);

Und in Zeile 41 dann stattdessen $id verwenden.

Woher ich das weiß:Studium / Ausbildung – Bachelorstudent Informatik, 6. Semester
    $id = $bdd->real_escape_string($_GET['id']);
    $search = $bdd->query("SELECT * FROM con WHERE id="$id

Also dann so muss ich bei den anderen sachen auch was machen

0
@Endrick93
$id = $bdd->real_escape_string($_GET['id']);
    $search = $bdd->query("SELECT * FROM con WHERE id=".$id);
0

Soweit ich das dann verstanden habe auch hier

 $s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy=".$_GET['id']);

zu

 $s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy="$id
0

@Question98 Ich habe es nun so geändert

$id = $bdd->real_escape_string($_GET['id']);
    $search = $bdd->query("SELECT * FROM con WHERE id=".$id);

aber es funktioniert nicht so ganz

0
@Endrick93

"aber es funktioniert nicht so ganz" ist keine Fehlerbeschreibung. Was geht nicht? Wenn PHP einen Fehler ausgibt: Welchen?

1
@Question98
$id = $bdd->real_escape_string($_GET['id']);
    $search = $bdd->query("SELECT * FROM con WHERE id=".$id);

Wenn ich das so verwende tut sich an der Seite nichts mehr diese ist dann einfach weiß

0
@Endrick93

Das ist nicht der PHP Fehler. Wenn die Seite weiß ist, sind PHP-Fehlermeldungen deaktiviert. Wo hostest du die Seite? Auf einem normalen Webspace? Dann müsste dein Anbieter irgendwo eine Funktion haben, die PHP Error Logs aufzurufen. Auf deinem eigenen Server oder PC? Dann entweder die Nginx error.log Datei finden und öffnen, oder in der php.ini "display_errors" auf 1 schalten, dann werden die Fehler im Browser angezeigt.

0
@Question98

Also ich hoste die Seite selber auf einem vServer

0
@Question98

Ich habe nun in der php.ini display_errors auf  on gesetzt dabei kommt leider auch nichts raus

0
@Question98

Habe es nun geschafft ein Fehler wurde ausgegeben der Lautet

Fatal error: Uncaught Error: Call to undefined method PDO::real_escape_string() in test.php:42 Stack trace: #0 error.php(4): include() #1 {main} thrown in test .php on line  42

Laut Fehlerausgabe ist ein Fehler in Zeile 42:

 $id = $bdd->real_escape_string($_GET['id']);
0
@Endrick93

Weil du PDO::real_escape_string() benutzt. Was es nicht mehr gibt.

Was du benutzen sollst ist mysqli_real_escape_string(). Oder einfach Prepared Statements. Hat der Antwortgeber ja geschrieben.

0
@MrAmazing2
$id = $bdd->mysqli_real_escape_string($_GET['id']);
   $search = $bdd->query("SELECT * FROM con WHERE id=".$id);

so oder wie?

0
@Endrick93

Kein Plan wie genau du es benutzt, musst du wohl googlen, sorry xD

ich kann nur Fehler lesen xD

ich glaub aber mit prepared statement ist man besser dran.

0
@MrAmazing2

Es kommt wieder der gleiche Fehler: Fatal error: Uncaught Error: Call to undefined method PDO::mysqli_real_escape_string()

0
@Endrick93

Ja, in der PDO-Klasse gibt es das real_escape_string() nicht. Ich ging davon aus, du verwendest den "normalen" MySQLi Wrapper. Da du aber bereits PDO nutzt, musst du statt dessen meine erste Antwortmöglichkeit nutzen:

"Am besten ist, es PDO / Prepared Statements zu verwenden, da können dir solche Fehler normalerweise nicht passieren."

Alles mit ->fetch(), ->query() usw. über den Haufen werfen, und Prepared Statements verwenden. Unter dem Link oben ist unter dem Punkt "Prepared Statements" eine Anleitung. NICHT den Code aus dem Punkt "SQL Query an Datenbank senden" verwenden, sondern eins darunter.

0
@Question98

Ok Danke. Könntest du mir vllt. ein Beispiel dazu senden anhand dessen:

 $search = $bdd->query("SELECT * FROM con WHERE id=".$_GET['id']);
    $convoy = $search->fetch();
0
@Endrick93

Das Beispiel findet sich auf der verlinkten Seite. Einfach die Variablen und die Query austauschen... Aber hier:

$statement = $bdd->prepare("SELECT * FROM con WHERE id = ?");
$statement->execute(array($_GET["id"]));   
while($row = $statement->fetch()) {
   var_dump($row);
}

... oder aber für bessere Lesbarkeit mit benannten, statt anonymen Parametern:

$statement = $bdd->prepare("SELECT * FROM con WHERE id = :id");
$statement->execute(array(":id" => $_GET["id"]));   
while($row = $statement->fetch()) {
   var_dump($row);
}
0
@Question98

Das funktionier aber wenn ich es hier:

 $s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy=".$_GET['id']);

einsetze geht es nicht

0
@Endrick93

Dann hast du was falsch gemacht.

$statement2 = $bdd->prepare("SELECT * FROM convoy_part WHERE user_convoy = :convoy");
$statement2->execute(array(":convoy" => $_GET["id"]));   
while($row = $statement2->fetch()) {
   var_dump($row);
}
0
@Question98
  <div class="table-responsive"> 
                    <table class="table">
              <thead>
                <tr>
                  <th scope="col">#</th>
                  <th scope="col">User</th>
                  <th scope="col">Datum</th>
                  <th scope="col"><a class="btn btn-primary" href="convoy_user.php?id=<?php echo $convoy['id']; ?>&action=part" role="button">Teilnehmen</a></th>
                </tr>
              </thead>
              <tbody>
        <?php
            while($data = $statement2->fetch()){
        ?>
                <tr>
                  <th scope="row"><?php echo $data['id']; ?></th>
                  <td><?php echo $data['name']; ?></td>
                  <td><?php echo $data['date']; ?></td>
               
                </tr>
              
        <?php
            }
        ?>

Wenn ich es hier in der Liste mit:

while($data = $statement2->fetch()){

abfrage wird nichts angezeigt

0
@Endrick93

@Question98

Weist du was daran falsch ist wenn ich das

while($row = $statement2->fetch()) {

und bei der Liste das

while($row = $statement2->fetch()){
0

Zeile 41: "SELECT * FROM con WHERE id=".$_GET['id']",

wenn du für $_GET['id'] z.B. folgendes einsetzt:

"; drop table;"

Eigentlich ist jede deiner Querys für Injections anfällig. Z.41 ist nur ein Beispiel.

Woher ich das weiß:Studium / Ausbildung – Ausgebildeter Informationstechnischer Assistent (Ø 1,08)

Kannst du mir dabei helfen diese zu beheben?

1

Was möchtest Du wissen?