Beiträge von SteveWinfield

    Ich mach mir da keine Sorgen. Wer wirklich kommt, hatte es bis jetzt sicher nicht unbedingt nötig hier echt mit total coolen unqualifizierten Sprüchen ohne jegliche Absicht zu trollen aufzufallen. Und wer am Ende Dreck von sich gibt, muss dann für alle zahlen. Qualifikation wünschenswert, wird aber nicht benötigt.

    Ich kann euch nur Capnix.com empfehlen: "10,000 MB Hosting Space, 14/7 Customer Support, MySQL Version 5.1.58, cPanel Webhosting panel, unlimited FTP, POP3, SMTP, Email accounts, free, Your Ads are allowed, No forced Ads on your site"

    Sowas kann ich einfach nicht verstehen: "Wieso HabCity.DE? Wir haben die Domain HabCity mit unseren Server konfiguriert. Die Verwaltung etc. läuft alles über HabCity.de."
    Was ist denn das für ein Grund?

    Oh, du hast die Smilies von meinem Chat geklaut, du böser Junge!

    Mein Chat: Willkommen zum Chat: Stelle anderen Mitgliedern Fragen und Entdecke die Community!


    Bei dir werden pro Sekunde 3 Requests versendet. Wäre wohl ressourcenschonender, wenn du das alles über eine Art "pull" Request machst und du die Antwort dann zu JSON formatierst. Und das mit dem "vor 5 Sekunden.." stört etwas. Könnte man auf Minuten verlängern ( < 1 wäre dann vlt. "just now"). Sonst echt cool gemacht, das Template gefällt mir.

    iExit, mir gefällt deine Struktur nicht so. Du erstellst anscheinend auch 2x eine MySQL Verbindung, was ich nicht verstehe. Und noch ein kleiner Tipp: Bei 'for' Schleifen bei $i < fun(..) wird fun() nach jedem Durchgang ausgeführt. Bei dir müsste also für jedes Leerzeichen der Array neugezählt werden. Am Besten in eine Variable stecken. Außerdem checkst du zuerst if($i > 0) und danach elseif($i <1).. Wenn $i > 0 ist, dann ist ja eigentlich schon der andere Fall klar. Ein "else" alleine wäre da genug.

    Cheers
    Steve Winfield

    Ich hatte schon vor Monaten mit Python Kontakt und habe mich mit dieser Sprache intensiv beschäftigt. Eine gute Alternative zu PHP, wird aber nicht sehr oft in IT-Unternehmen verwendet. Was ich in der Szene bis jetzt noch nie von jemandem gehört habe, war die Programmiersprache Scala. Ich mache derzeit ein freiwilliges Praktikum bei einer Firma, welche internationalen Unternehmen Kommunikationsmöglichkeiten bietet. Dort wird unter anderem Scala (wie Java) für den Backend Bereich verwendet und um mich richtig einbringen zu können und später berufliche Chancen zu steigern (Ich sehe Zukunft in dieser Sprache, sie fiel mir das erste Mal auf, als sie in Twitter eingebracht wurde), lerne ich seit einiger Zeit auch neben Java diese Sprache. Sie bietet dir unter anderem Typinferenz, funktionale Programmierungsmöglichkeit und eine gute Integration mit Java (Scala läuft in der JVM).

    Achja und das wäre nicht das erste mit Python programmierte HabboCMS.
    [Development] [Python] CaveCMS - RaGEZONE - MMO development community

    Cheers
    Steve Winfield

    @rE-b0ot: Anscheinend versteht da jemand nicht den Unterschied zwischen Codieren und Programmieren. ;)

    Mal wieder so ein Schlaumeier, yuhu. Kodieren bedeutet z.B. einen Text verschlüsseln, also ein Antonym für Dekodieren. Programmieren ist in seinem Fall schon richtig, also bitte das nächste Mal nachdenken, bevor du hier etwas Unüberlegtes postest.

    Emerica:
    Es ist wohl in dem Punkt unsicher, das man sich als jemand anderes ausgeben kann um so eventuell an spezielle Daten kommt, an die nur der User dran kommt, der den gleichen Nutzernamen besitzt. Falls eine Session gesetzt wird (mit dem Usernamen zur Authentifizierung), könnte man sich wenn der dieser User Zugriff auf einen Adminbereich hat, auch dort einloggen.


    Cheers
    Steve Winfield

    Steve Dleifniw:
    Ich habe es für Einsteiger programmiert, damit Sie es sehen wie so ein Register grundsätzlich aufgebaut ist.
    Dass man Parameter usw. prüfen soll ist mir natürlich klar, denn Sicherheit geht bei mir immer vor!


    Das sehen sie auch wenn ein paar Checks mir drinnen sind. Sie lernen es deshalb falsch und machen dann den gleichen Fehler wie du und das nimmt dann alles seinen Lauf.. Wieso denkt jeder: Umso kleiner der Script, umso einfacher ist er

    Cheers
    Steve Winfield

    Jap und mit diesem Script hat dir jeder innerhalb von einer Minute die Datenbank geklaut.


    Da denkt wohl jemand auf schlau tun zu müssen. Im Script befindet sich keine SQL-Lücke, höchstens die XSS könnte vlt. gefährlich werden. Ich würde dir empfehlen unnötige Variablen sein zu lassen und vor jedem POST zu prüfen ob auch jeder Parameter gesetzt wurde.

    Cheers
    Steve Winfield

    Am besten trägt man Sachen in die Datenbank ein ohne diese gegen XSS zuschützen.
    Erst bei der Ausgabe filtert man den eingetragenen Text, da es keinen Sinn macht etwas in der Datenbank gegen XSS zuschützen.

    Also:
    mysql_real_escape_string() beim Eintragen
    und
    htmlentities() / htmlspecialchars()
    beim Ausgeben

    Außerdem empfehle ich, dass man die Ausgabe, das was der Benutzer später sehen wird, von der Programmlogik auseinander hält.
    Um dies zu erreichen wäre es angebracht ein Template System zu verwenden.


    Wenn du etwas in der Datenbank gefiltert speicherst, musst du es danach nicht mehr beim Ausgeben filtern und sparst dir somit Scriptlaufzeit (Das ist genau das, was ich euch im Thread mitteilen wollte). Das mit dem Template-System ist auch nichts, was die Performance oder den Speicher beeinflusst, sondern eher eine Sache für jedermann (Empfehle ich auch nur für komplexere Projekte). Ein Template-System wie Smarty verlängert die Scriptlaufzeit sogar um ein vielfaches, also würde ich Smarty nur verwenden, wenn es wirklich benötigt wird.

    Cheers
    Steve Winfield

    Hi Leutz,

    da ich hier immer wieder in euren Codes Sachen sehe, die mich total aggressiv machen, möchte ich euch jetzt ein paar Tipps geben, wie ihr mein Leben hier erträglicher machen könnt. Vielen Dank für eure Aufmerksamkeit!

    Also fangen wir einfach mal klein bei Numero 1 an. Hier hätten wir ein kleines Script:

    Okay. Dieses Problem ist jetzt nicht all zu tragisch, kann jeder falsch machen. Trotzdem könnte es in diesem Fall erhebliche Performance Probleme geben, falls viele Einträge vorhanden sind. Erahnt ihr das Problem?

    Hier ist die Auflösung:

    Spoiler anzeigen


    Nehmen wir mal 2 Sachen aus dem Code..

    PHP
    $_POST['flags'] = trim(mysql_real_escape_string(htmlspecialchars($_POST['flags'])));
     mysql_query('INSERT INTO ... (flags, content) VALUES (\''.$_POST['flags'].'\',\' '.$_POST['content'].'\');


    So, was können wir feststellen? $_POST['flags'] wird in der ersten Zeile für die SQL-Abfrage escapt und dann zusätzlich noch gegen XSS-Attacken und (teilweise) gegen Spam geschützt. Danach wird $_POST['flags'] in eine Tabelle eingetragen. Soll auch so sein, hier können wir keinen Fehler entdecken.
    Nehmen wir noch ein paar Zeilen raus:

    PHP
    while ($row = mysql_fetch_array($qr)) {
          echo htmlspecialchars($row[0]) . '<br />';
    }


    Wir sehen, dass es wieder vor HTML gesichert wird, nämlich 2-mal. Etwas unnötig, oder? Das ist nur ein kleines Beispiel so was könnte man bei etlichen anderen Funktionen auch machen. Aber bedenkt bitte: Falls ein Eintrag geändert/hinzugefügt werden kann, wo er nicht gegen HTML gesichert wird und man keinen Zugriff auf diese Server-Dateien hat, dann empfehle ich euch die XSS-Protection in der SQL-Query einfach wegzulassen und sie bei der Ausgabe stehen zu lassen.

    Schön und gut, weiter geht es mit der 2. Da hätten wir noch ein Script:

    PHP
    <?php
    // mysql connection und so weiter..
    $q = mysql_fetch_assoc(mysql_query('SELECT * FROM ... ORDER BY id DESC LIMIT 1'));
    echo 'Hallo.. der neuste Benutzer hat die ID '.$q['id'].' und er hat '.$q['coins'].' Taler!';
    ?>


    Wer kennt das Problem? Die Lösung:

    Spoiler anzeigen


    Wenn du die Query..

    SQL
    SELECT * FROM ... ORDER BY id DESC LIMIT 1


    .. hast, dann werden mit * alle Spalten abgefragt, da wir aber nur zwei brauchen werden hier etliche andere Spalten umsonst abgefragt.
    Also.. kurz und knapp: Wenn du z.b. nur ID und Taler eines Users abfragen möchtest und nicht mehr brauchst, dann musst du nicht mehr eingeben als

    SQL
    SELECT id, coins FROM ... ORDER BY id DESC LIMIT 1


    Simpel, nicht?
    Und falls du am Ende nur eine Spalte abfragen möchtest, empfehle ich dir die Funktion 'mysql_result'.

    PHP
    <?php
    // mysql.. balbla
    echo 'Blabla hat die User ID: ' . mysql_result(mysql_query('SELECT id FROM ...'), 0);
    ?>

    Alle guten Dinge sind drei.. kommen wir zum 3ten Punkt:

    PHP
    <?php
    $count = '1';
    echo $count;
    ?>


    Okay.. das Problem müsste jeder erkennen.

    Spoiler anzeigen


    In PHP muss man keine Datentypen angeben, weswegen die Sprache sehr oft von Anfängern gelernt wird, da sie unkompliziert ist und alle denken, sie müssen sich keine Gedanken über den Speicher machen. Es gibt in PHP (versteckt) unter anderem Datentypen wie Integer (Zahl) und String (Kette von Zeichen) oder Boolean (wahr oder falsch). Jeder Datentyp verbraucht eine andere Anzahl an Bits und hat speziell dafür gemachte Methoden. Mit den zwei Zeichen " und ' initialisiert du normalerweise einen String, für einen Integer reicht einfach nur eine Zahl. Wir sehen also oben im Code $count wird als String initialisiert und hat als Inhalt eine Zahl. Wieso nicht gleich als Integer initialisieren? So würde $count unter anderem weniger Speicher verbrauchen und bei Rechenoperationen müsste der String nicht immer in einen Integer umgewandelt werden.

    Wir machen also stattdessen:

    PHP
    <?php
    $count = 1;
    echo $count;
    ?>

    So, das waren erstmal 3. Mir fallen noch 1000 weitere ein, aber ich hatte jetzt einfach keine Lust mehr weiterzuschreiben. Gegebenenfalls folgen weitere Tipps, falls ich mal wieder nichts zu tun habe.

    Cheers
    Steve Winfield

    Man müsste so ein Copyright Schutz von Anfang an der CMS programmieren wo das Hauptkern ist.
    Bzw. wenn der Script weg ist oder entfernt ist das er die CMS garnicht mehr anzeigt das kann man wie gesagt mit Overlays machen.
    Aber ein normaler Mensch würde den Script bzw den Check einfach von der jeweiligen Datei löschen oder auch den Check auf seine Art umändern.

    Deswegen sagte ich ja man solle die Overlays unauffällig zum Content passend verstecken bspw. mit der ID "loginBox". Und diese Overlays werden dann auf der Seite verteilt. Du als Ripper wüsstest dann nicht ohne genaue Analyse, wo dieses Problem liegt. Sowas ist häufig abschreckender gegen einen Noob als "verschlüsseltes" HTML.

    Effektiver wäre so eine kleine Abmahnwelle, einfach bei einem Juristen informieren. Naja.. ich empfehle dir nicht deinen Code zu "verschlüsseln", ich würde eher eine Menge von unauffälligen, zum Content passenden kleinen Checks in die Seite einbauen, die die Seite unbenutzbar machen würden, falls Javascript Code entfernt wird oder dein Copyright entfernt oder geändert wird. 1-4 kleine Overlays über die Seite, die dann jeweils verteilt einzelnd und so unauffällig wie möglich in den Hintergrund gerückt werden, falls alles in Ordnung ist. Hat bei mir bis jetzt immer am Besten geklappt.

    Cheers
    Steve Winfield