Blätterfunktion

X

xe0n

Guest
Hi, ich suche schon seit längerem eine Blätterfunktion, womit ich blättern kann, jedoch finde ich keine richtige die ich verstehe und nachvollziehen kann!
Kann mir vllt jemand so ein ding mal machen und dazu schreiben was ich beachten muss usw?!

Mit freundlichen Grüßen
xe0n
 
Hallo,

leider kann ich mit der Beschreibung relativ wenig anfangen. Blätterfunktion in welchem Zusammenhang? Nutzt du ein vorgefertigtes Script (Wordpress-Blog, Typo3-Seite, ...), oder hast du eine eigene Website mit selbst erstelltem Code in PHP / Python / ASP / Java-JSP ? Was genau soll wie geblättert werden?
 
Also ich bin dabei ein eigenes CMS zu schreiben.
Nun brauch ich eine Blätterfunktion die zb. nach jeder 5ten News eine neue Seite aufmacht und die nächsten 5 News zeigt.
Jedoch habe ich eine gute Blätterfunktion gefunden =)

CODE <?php

$sql = "SELECT * FROM `Tabelle`;"; //Anstatt 'Tabelle' natürlich die betreffende Tabelle auswählen
$eintrage = mysql_num_rows(mysql_query($sql)); //Die Einträge der Tabelle herausholen
$maxproseite = 5; //Statt der 5 die maximale Anzahl der Einträe pro Seite angeben
$i = 0;

$seiten = $eintrage / $maxproseite; //Anzahl der Seiten errechnen

if (!isset($_GET['page'])) { //normalabfrage, wenn keine Seite gegeben ist.
$sql = "SELECT * FROM `Tabelle` ORDER BY `Datum` LIMIT 0,".$maxproseite.";";
} else { //Abfrage, wenn eine Seitenzahl gegeben ist.
$abeintrag = $_GET['page'] * $maxproseite - $maxproseite;
$sql = "SELECT * FROM `Tabelle` ORDER BY `Datum` LIMIT ".$abeintrag.",".$maxproseite.";";
}
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
echo $row['Name']." schrieb am"... //Ausgabe der Daten
}
echo "Seite ";
for($i = 1; $i - 1< $seiten; $i++){ //Ausgabe der Linkliste
echo "<a href=\"index.php?section=gb&page=".$i."\">".$i."</a> ";
}
?>
 
Hallo xe0n,

jetzt verstehe ich, was Du meinst
smile.gif


Allerdings hat dein Script leider eine riesengroße Sicherheitslücke: Man sollte $_GET-Abfragen nie, nie, niemals direkt verwenden.

Also besser:

CODE
$selected_page = mysql_escape_string(strip_tags($_GET['page']));



und dann überall, wo du vorher auf $_GET['page'] zugegriffen hast, nur noch auf $selected_page zugreifen.

Ansonsten bist du auf PHP- und SQL-Ebene absolut angreifbar...
 
QUOTE (weblions @ So 21.09.2008, 18:15)Allerdings hat dein Script leider eine riesengroße Sicherheitslücke: Man sollte $_GET-Abfragen nie, nie, niemals direkt verwenden.

Also besser:


CODE
$selected_page = mysql_escape_string(strip_tags($_GET['page']));



und dann überall, wo du vorher auf $_GET['page'] zugegriffen hast, nur noch auf $selected_page zugreifen.

Ansonsten bist du auf PHP- und SQL-Ebene absolut angreifbar...

Klasse Tipp - geht bloß zu 99 % am Problem vorbei.

Im Code oben wird die Nutzereingabe multipliziert, ist also eine Zahl - da nutzt Escaping nix.

Und wenn das Multiplizieren nicht da wäre, dann wäre die Verwendung der mysql_escape_string erst recht unnütz: Man könnte an dieser Stelle problemlos einen ganzen Sql-Befehl übergeben.

Entweder per UNION die Ausgabe um ein paar interessante Dinge erweitern oder per Delete from etwas aufräumen.

Ganz abgesehen von jenen netten Maskierungen per CAST, die inzwischen ja auch bei mySql funktionieren. Der injizierte String hat keinerlei Hochkomma mehr.
 
QUOTE Allerdings hat dein Script leider eine riesengroße Sicherheitslücke: Man sollte $_GET-Abfragen nie, nie, niemals direkt verwenden.


Das ist richtig - myreal_escape_string eignet sich allerdings nur zur Prüfung von Strings. Da es sich hier um eine Ganzzahl handelt, sollte hier auf den Datentyp Integer geprüft werden


CODE $selected_page = intval($_GET['page']);


Im obigen Script wurde $_GET['page'] übrigens gar nicht direkt in die Abfrage eingebaut und $abeintrag ist insofern bereits sicher, da es durch eine Rechenoperation definiert ist und somit automatisch vom Datentyp Integer
 
QUOTE Im Code oben wird die Nutzereingabe multipliziert, ist also eine Zahl - da nutzt Escaping nix.


Ich gebe zu, das ist mir glatt "durchgerutscht". Prinzipiell verkehrt ist eine solche Absicherung aber trotzdem nicht - und ich habe nie behauptet, dass damit alle Sicherheitslücken geschlossen sind
wink.gif
 
Zurück
Oben