Beiträge von Afrael

    verstehs net, gib doch der spalte anzahl einfach den standart wert 0, dann hat die spalte auch immer 0 wenn es keine besucher gibt


    mfg

    Das ist für die Zukunft sinvoll, hilft ihm aber rückwirkend nicht.

    Ich verstehe ehrlich gesagt nicht, warum die Leute Datetime benutzen. Mit unix-timestamps lässt es sich doch viel einfacher rechnen, oder nicht? In diesem Fall könnte man dann in der Ausgabeschleife prüfen, ob zwei aufeinanderfolgende Einträge z.B. mehr als 25 Stunden auseinanderliegen. Dann wüsste man, wo Tage fehlen.

    ja dann halt nicht ich gebe doch net 500 € aus


    Gern geschehen.

    Es ist nicht absolut ausgeschlossen, dass du einen Anfänger findest, der das für lau macht, um später Referenzen vorweisen zu können, aber entsprechend wird die Qualität ausfallen. Mit sehr viel Glück findest du einen Nicht-Anfänger, der es für gratis macht.

    Sorry, ich kenn zwar die Preise kaum, aber ich bin mir ziemlich sicher, dass du mit 100 € für alles, was du brauchst, nicht auskommst. Außerdem vermute ich stark, dass du gar keine richtige Backend-Programmierung hast, und die ist wichtiger als der HTML/CSS-Kram. Ich hab für dich aber mal deine Beschreibung Korrektur gelesen, viel Erfolg noch.

    Zitat

    Eines Tages im Königreich Neaplis verschwand der König Amirus urplötzlich. Kein Mensch wusste, wohin er verschwunden war, und ob er noch lebte. Luzius, der nächste in der Thronfolge von Neaplis, übernahm den Platz von Amirus. Er hatte den Gedanken verworfen, dass dieser jemals wieder zurückkehren konnte. Luzius riss die komplette Macht an sich und machte es sich zu seiner Aufgabe, das damals schöne und friedsame Neaplis zu verändern. In wenigen Monaten bestand das gesamte Königreich aus einer Sklavenkammer, in der Folter und Vollstreckung an der Tagesordnung war. Nur das Wort des Königs zählte. Es war das absolute Gesetz! Wer sich nicht daran hielt, wurde bestraft.


    Ab hier würde ich Präsens nehmen, um den Leser miteinzubeziehen, ihm den Eindruck zu geben, ins Geschehen eingreifen zu können.

    Zitat

    Nun ist schon fast eine halbes Jahrhundert vergangen, und die dunkle Herrschaft Luzius nimmt kein Ende. Es regieren Leid, Trauer und Elend. Das Volk hofft auf Rettung. Nördlich im Lande des Königreiches werden Aufstände zerschlagen. Aber im Osten des Königreiches gibt es eine Legende. Ein Held soll geboren werden - um das Urteil des bösen zu richten, und um das Unheil zu bekämpfen, sodass das Königreich Neaplis einst wieder erblühen kann, so wie es einmal war, als alle noch in Frieden und ohne Leid lebten.
    Und so lautet die Legende im Osten des Königreiches. Ein kleines Dorf ganz unscheinbar, es heißt Ortuna. Dort wird eines Tages ein Abenteurer geboren...
    Viele Abenteurer haben ihr Glück gesucht. Nicht wenigen wird ihr Mut zum Verhängnis werden.

    @TehU: Der Threadersteller scheint den Alert für eine Art Validierung zu benutzen. Ich meinte, er soll sich nicht darauf verlassen, dass der Benutzer Javascript an hat, sondern auch noch irgendwie anders (PHP?) validieren.
    Und Standardwert von display ist display, das weiß ich zufällig :)

    Danke für eure Antworten ;)

    EDIT:
    Achso, wie bekomm ich das hin dass die Tabelle in einer zufälligen Reihenfolge ausgelesen wird?
    Finde keinen Befehl dafür...

    Gruss, Donkey

    SELECT banner, site FROM rotator ORDER BY RAND()
    Es ist evtl sinnvoll, nur eine bestimmte Anzahl von Bannern auf einmal auszugeben. Das erreichst du mit LIMIT maximale_anzahl. Beispiel:

    SQL
    SELECT banner, site FROM rotator ORDER BY RAND() LIMIT 5


    wählt fünf zufällige Einträge.

    Obwohl auf meinen Thread keine Antwort kam, denke ich, dass doch trotzdem (vor allem bei Anfängern) Bedarf besteht. Aus diesem Grund hab ich diesen Beitrag vorbereitet.

    Wenn es um die Sicherung von Webseiten geht, sollte man grundsätzlich von einer Annahme ausgehen:

    Der Benutzer ist böse. Wo er Daten eingeben kann, wird er versuchen, eine Lücke zu entdecken.

    Man sollte sich niemals darauf verlassen, dass der Benutzer nicht weiß, wie man Sicherheitslücken ausnutzt, deswegen lässt man diese am besten gar nicht entstehen. Hier will ich ein paar der häufigsten Probleme beleuchten.

    Inhaltsverzeichnis

    • register_globals/import_request_variables()
    • XSS/CSRF
    • SQL Injection
    • Remote/Local File Inclusion
    • eval(), Systembefehle, SSI (Server Side Includes)
    • Ungehashte Passwörter
    • Allgemeines


    1. register_globals/import_request_variables()
    Die Server-Einstellung register_globals erlaubt es, in Formularen oder per URL übergebene Werte direkt im Script zu verwenden. Ein Wert, der z.B. in der URL http://example.com/index.php?id=4 id heißt, wäre im Script direkt als $id verfügbar.
    Was passiert nun aber, wenn wir folgendes Script admin.php haben?

    und ein Angreifer die URL http://example.com/admin.php?admin=1 aufruft? Dann wird der Wert von admin in $admin reingeschrieben und der Benutzer hat freien Zugriff auf die Adminoberfläche. Man sollte deswegen register_globals auf dem Server deaktivieren. Die Zeile

    PHP
    <?php ini_set("register_globals", "0"); ?>


    sollte in jedes Script ganz oben eingesetzt werden, wenn register_globals an ist. Dies kann mit phpinfo() überprüft werden.

    Ein ähnliches Verhalten wie register_globals ermöglicht die Funktion import_request_variables(). Aus den gleichen Gründen wie register_globals sollte man sie nicht verwenden.

    2. XSS/CSRF
    Die Idee beim Cross-Site Scripting (XSS) ist, den Benutzer bösartigen Javascript-Code ausführen zu lassen, der im schlimmsten Fall seine Cookies klaut. Ich weiß nicht, inwiefern ich hier das genaue Vorgehen erklären darf, deshalb lass ich es lieber.
    Der Angreifer will ein <script> Tag einbringen, das auf Userseite ausgeführt wird. Das trivialste Beispiel wäre folgendes Fehlerscript error.php:

    PHP
    <?php
    $message = $_GET['message'];
    echo "Es gab einen Fehler! Der Fehler war: ". $message;
    ?>


    Der Programmierer hat ein anderes Script erstellt,
    das im Fehlerfalle auf error.php?message=Fehlende%20Rechte umleitet. error.php gibt erwartungsgemäß

    Zitat

    Fehlende Rechte


    aus. Was ist nun, wenn ein Angreifer einen Link zu
    error.php?message=<script>alert('xss')</script> vorbereitet und an seine Opfer verschickt? Dann ist die Ausgabe

    Zitat

    <script>alert('xss')</script>


    Das Javascript wird auf der Seite des Users ausgeführt.
    CSRF (Cross-Site Request Forgery) kann unter Umständen mit XSS kombiniert sein. Das Ziel ist zum Beispiel, einen Admin eine bestimmte Aktion ausführen zu lassen, indem dieser einen Link anklickt.

    3. SQL Injection

    The User hat in seinem Lexikon-Eintrag schon ziemlich alles, was man als Entwickler wissen sollte, aufgeführt.
    Es wäre noch zu erwähnen, dass eine SQL-Injektion auch möglich ist, wenn man vom Benutzer eine Eingabe für ORDER BY erwartet, wie in diesem Beispiel:

    PHP
    //topliste ausgeben
    $sql="SELECT username, level, ruhm, gold FROM usertable ORDER BY $order DESC LIMIT 50"


    Man sollte deshalb prüfen, ob $order in der Liste der auszuwählenden Felder ist.

    Zusätzliche Informationen würden nur darüber gehen, wie man SQL Injections ausführt, und das gehört hier nicht hin ;)

    4. Remote/Local File Inclusion
    Die Kurzfassung ist: Man sollte keine Dateien inkludieren oder ihre Inhalte ausgeben, wenn der Benutzer einen Teil des Pfads selber übergeben kann. So wäre es einem Angreifer zum Beispiel möglich, Dateien, die auf seinem Webspace liegen, einzubinden, oder Inhalte von Dateien, die auf dem Server liegen (.htaccess und ähnliches) auszulesen.

    5. Man sollte fast absolut nie Benutzereingaben in solche Befehle wie eval(), system() oder sonstige einfügen, da dies immer ein Sicherheitsrisiko darstellt. Auch Server Side Includes, wenn man denn welche verwendet, sollten keine Benutzereingaben direkt verwenden.

    6. Siehe: Hashing.

    7. Allgemeines
    Zu beachten ist, dass diese möglichen Sicherheitslücken untereinander kombiniert werden könnten. So könnte zum Beispiel ein Angreifer in mySQL zuerst einen Fehler erzeugen und wenn ihm dann seine fehlerhafte Query ausgegeben wird, XSS einschmuggeln.
    Außerdem gelten die Hinweise hier sowohl für Daten, die über GET, also über die URL übergeben werden, als auch über POST. Ein Angriff über letzteres ist zwar meist kompliziert, aber definitiv nicht unmöglich.
    Manche neueren Webseiten verwenden URLs wie http://example.com/users/Afrael. Intern wird dabei das Script http://example.com/user.php?username=Afrael aufgerufen. Auch hier könnte man die beschriebenen Methoden anwenden, die URLs stellen also keine Sicherheitsmaßnahme, sondern allenfalls eine Bequemlichkeit für den User dar.
    Zuletzt ist noch von der Ausgabe von $_SERVER['PHP_SELF'] im Script abzuraten. Wird die URL nämlich manipuliert, ist XSS möglich.

    Anmerkungen, Ergänzungen usw bitte hier rein.

    Edit 1: Eine weitere Möglichkeit der Validierung, die ich vergessen habe zu erwähnen, sind Reguläre Ausdrücke. Wer sich darüber informieren will, kann im Internet nach RegExp oder regular expressions suchen. Zu beachten ist jedoch, dass diese meistens relativ langsam ausgeführt werden.

    Code
    document.getElementById('id_deines_divs').style.display='none';

    setzt das div auf unsichtbar.

    Hast du dich denn auch für den Fall abgesichert, dass der Benutzer Javascript aus hat?

    Was ist bei deiner Tabelle denn der Primärschlüssel? Normalerweise ist es ein Feld `id` vom typ int, das auf auto_increment und primary key gesetzt ist. Der Primärschlüssel dient dazu, jeden Eintrag eindeutig zu identifizieren. Das Feld erhöht sich bei jedem Eintrag selber um eins, es braucht kein Wert über PHP dafür gesetzt zu werden.

    Ad 1: phpBB steht laut Wikipedia unter GPL, welche kommerzielle Nutzung ausdrücklich erlaubt. Es könnte höchstens sein, dass dein Webspace-Anbieter keine Werbung erlaubt, was aber ungewöhnlich wäre.

    Die Spalten ja und nein kannst du thoretisch direkt in ein Feld vom Typ boolean verschmelzen. Hier hast der User ja nur zwei Möglichkeiten. Du nennst die Spalte zum Beispiel wohlergehen. Wenn es ihm gut geht, trägst du eine 1 ein, sonst eine 0.

    Zitat von SinnlosS

    Am einfachsten vielleicht, trotzdem ist davon abzuraten.


    Mein Fehler. Ich ging davon aus, dass nichts schlimmes passieren könnte, wenn er keine Cookies verwendet. Allerdings könnte man da auch noch andere Sachen mit einstellen, wie mir gerade auffällt, zum Beispiel Hits für eine andere Webseite sammeln.


    Wo wir schon dabei sind, von der Ausgabe des SQLs und des SQL-Errors im Klartext ist auch generell abzuraten. Angenommen, der Benutzer schafft es, einen SQL-Error zu erzeugen, in dem auch Javascript vorkommt. Beispiel:

    Du hast ein Feld, das einen Zahlentyp erwartet. Der Benutzer schmuggelt einen String ein (wie, will ich an dieser Stelle nicht ausführen). Dann wirft deine Anwendung einen SQL-Error aus, in dem der eingeschmuggelte String ungefiltert ausgegeben wird.
    Schlußfolgerung: html_entities() auf $sql und mysql_error() anwenden und dann erst ausgeben.