Jetzt Mitglied werden
Kostenlos registrieren und die vielen Vorteile der Webmasterpro-Mitgliedschaft nutzen.
Forum - Entwicklung
- Markup (HTML, XML, etc.) und CSS
- Skriptsprachen (PHP, Javascript, etc.)
- Datenbanken (SQL)
- CMS und Frameworks
- Flash und ActionScript
Info: Der Stern signalisiert, dass neue Beiträge vorhanden sind.
Alle Foren - Übersicht
Portal aktuelle Themen
Design aktuelle Themen
Server aktuelle Themen
- Webhosting und Webspace
- Betriebssysteme (Windows, Linux, etc.)
- Serveradministration
- Überwachung, Sicherheit und Backups
Management aktuelle Themen
Datenbanken (SQL) - Forum
Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.
Namen aus Gruppen LAden
Moin,
ja ich habe mal wieder ein prob. mit SQL... Ich möchte mir aus meiner SQL Tabelle nur die Namen raus holen die in der jeweiligen Gruppe ein getragen sind, aber irgend wie sagt er mir immer:
1 2 | SQLFatal error: Call to a member function fetch_object() on a
non-object in C:\xampp\htdocs\exis\new\download.php on line 31
|
Das kann ich aber nun garnicht nach volziehen, weil der Zeiger eigentlich auf der Gruppe stehen müsste. Weil in der Variable "$gruppe" ist ja die Gruppe die ich haben möchte Geladen.
So ich bin nun wie folgt vorgegangen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //config.php:
if (isset($_GET['gruppe'])) {
$gruppe = ($_GET['gruppe']);
}
//SQL.php
<?php
$ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = '$gruppe'';
$go = $mysqli->query($ausgabe);
while ($zeile = $go->fetch_object()) {
echo ($zeile->name);
}
?>
|
So ich denke der Code ist soweit verständlich?
Gruß eXis
nur ganz schnell überflogen, aber probiers mal so:
1 | $ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = \''.$gruppe.'\'';
|
nur ganz schnell überflogen, aber probiers mal so:
PHP
1 $ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = \''.$gruppe.'\'';
Kommt das selbe... Wobei ich nicht glaube das die Variable nicht richtig Indiziert wird. Weil wen ich diese über "echo $gruppe" aufrufe stehts ja drin...
Gruß eXis
nur ganz schnell überflogen, aber probiers mal so:
PHP
1 $ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = \''.$gruppe.'\'';
Mann mann Markus man sollte es auch mal richtig abschreiben... xD Also da mit geht es... Versteh ich aber irgend wo nicht, weil an einer anderen stelle habe ich das auch anders gelöst und da ging es super...
Naja evtl kann es mir ja noch mal wer erklären :)
Gruß eXis
Strings, man achte auf ' und " und der Verkettungsoperator.
download.php?gruppe=SQLPHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14download.php?gruppe=SQLPHP//config.php: if (isset($_GET['gruppe'])) { $gruppe = ($_GET['gruppe']); } //SQL.php <?php $ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = '$gruppe''; $go = $mysqli->query($ausgabe); while ($zeile = $go->fetch_object()) { echo ($zeile->name); } ?>
Du hast da drei größere Fehler in deinem Script:
- Du verwendest als einfache Anführungszeichen in einfachen Anführungszeichen. Bei dir geht der erste String so
'SELECT id, gruppe, name FROM download WHERE gruppe = '
danach kommt
$gruppe
und danach nochmal ein String:
''
Das hätte eigentlich einen Fatal Error werfen müssen... Nunja, wenn du außen oder innen doppelte Anführungszeichen verwendest, funktioniert es wieder (oder, wie vorgeschlagen, die inneren Anführungszeichen escape-st). Warum in deinem Fall doppelte außen vielleicht geschickter sind ... siehe 2.
- In einem String in einfachen Anführungszeichen werden keine Variablen ersetzt, er wird so angezeigt, wie er eingegeben wurde. Lässt sich einfach durch ein
echo $ausgabe;
überprüfen.
- Du validierst die Eingabe nicht und verwendest auch nicht z.B. mysql_real_escape_string(). Das Script ist derzeit ein offenes Scheunentor für jedweden Angriff.
Naja was heist Eingabe? Jede eingabe die du oben in der URL machst wird über eine If Anweisung geprüft ob diese einen Wer enthält.
Wende nun z.B. das hier "exis/test/download.php?site=<h1>3</h1>" eingibst oder andere Sachen anhängst passiert nix, weil der wert 3 nun keine Nummer mehr entspricht und so die IF Anweisung Flase zurückgibt.
1 2 3 4 5 6 7 8 9 10 11 12 | if(is_numeric($id_out)) {
$ausgabe = 'SELECT id, datum, cat, ueberschrift, intro, text, pic FROM news WHERE id = '.$id_out.'';
$go = $mysqli->query($ausgabe);
while ($zeile = $go->fetch_object()) {
echo '<span class="date"><img src="icons/calendar.gif" />'. date("d.m.y.",($zeile->datum)) . '</span>';
echo '<h2>'. ($zeile->ueberschrift).'</h2>';
echo '<p>' . ($zeile->intro) . '</p><br />';
echo '<p>'. ($zeile->text) . '</p>';
$imgurl = ($zeile->pic);
}
}
|
Kannst es auch gern hier testen...
Gruß eXis
Wende nun z.B. das hier "exis/test/download.php?site=<h1>3</h1>" eingibst oder andere Sachen anhängst passiert nix, weil der wert 3 nun keine Nummer mehr entspricht und so die IF Anweisung Flase zurückgibt.
Moment - wenn sich der Quellcode mittendrin grundlegend ändert, macht es keinen Sinn, dir helfen zu wollen. Der Quellcode in deinem letzten und der Quellcode in deinem ersten Posting sind einfach grundlegend andere.
Poste doch einfach mal den aktuellsten Code, um den es hier auch geht.
Joa gut hier der Code, aber viel anders sieht dieser auch nicht aus
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php
if (isset ($gruppe)) {
$ausgabe = 'SELECT id, datum, name FROM download WHERE gruppe = \''.$gruppe.'\'';
$go = $mysqli->query($ausgabe);
while ($zeile = $go->fetch_object()) {
?>
<p><a href="download.php?site=<?php echo ($zeile->id); ?>"><?php echo ($zeile->name); ?></a></p>
<?php
}
} elseif (is_numeric ($id_out)) {
$ausgabe = 'SELECT id, datum, intro, name FROM download WHERE id = \''.$id_out.'\'';
$go = $mysqli->query($ausgabe);
while ($zeile = $go->fetch_object()) {
echo ($zeile->name);
echo ($zeile->intro);
}
} else {
?>
|
... du gibst es also wirklich ungeprüft weiter an die Datenbank. Ich empfehle einmal folgende Website wirklich zu lesen.
http://de.wikipedia.org/wiki/SQL-Injection
... du gibst es also wirklich ungeprüft weiter an die Datenbank. Ich empfehle einmal folgende Website wirklich zu lesen.
Ach mann ej... Teste es doch einfach, dann wirst du sehen das es einfacht nicht geht... Gib nen beliebigen SQL Code in die URL ein oder versuch meinetwegen ne Shell auf das System zu laden... Es wird dir einfach nicht gelingen, weil ich dies schon alles probiert habe... Und im großen und ganzen ist sin und zweck der Gesichte irgend welche Kiddis fern zu halten, denn wen jemand deine Seite knacken will dann schaft er es auch, es fliegen schließlich genug Sploits (für alle Distributionen) im Netz herum.
Gruß eXis
Und im großen und ganzen ist sin und zweck der Gesichte irgend welche Kiddis fern zu halten, denn wen jemand deine Seite knacken will dann schaft er es auch, es fliegen schließlich genug Sploits (für alle Distributionen) im Netz herum.
Das ist ein gutes Argument. Ich kann meine Haustüre ja einfach offen lassen, da man sie ja einfach mit einem Auto einfahren könnte - da bringt das Schloss ja wenig. "... denn wenn jemand meine Haustür aufbrechen will, dann schafft er es auch, es fahren schließlich genug Autos (in allen Marken) auf der Straße herum."
---
Tut mir leid, ich werde es nicht testen. Wenn man die grundlegenden Sicherheitsmaßnahmen beim Programmieren mit einer solchen Vehemenz ablehnt, dann will ich mir auch keinen Aufwand machen, diese aufzuzeigen.
Na gut gehe ich mal auf deine Lösung ein! Was meinst denn was man tuen müsste um einen Cracker aus zu sperren?
Also in wie fern sol ich den noch meine $_GET Vraible prüfen das es in deinen Augen Sicher ist?
Gruß eXis




