Beiträge von The Scout

    Heyho,
    ich wollte einfach mal wissen, ob ihr PHP Frameworks nutzt, und wenn ja, welches und warum?
    Ich denke nämlich darüber nach, für das MoL Projekt ein PHP Framework zu nutzen, kann mich nur nicht richtig entscheiden :P

    Bisher schwanke ich vor allem zwischen Laravel und CodeIgniter, ich wollte anfangs Phalcon nutzen, das will aber kein Hoster installieren ;(
    Aber wenn jemand ein anderes, gutes Framework vorschlagen kann, immer her damit :D

    Ich muss ehrlich sagen, ich verstehe deine Ablehnung nicht?!
    Zwar fällt mir im Augenblick kein Szenario ein, wo diese variadics unabdingbar sind, allerdings klingt es auch nicht so dermaßen schlecht. Wenn einer Funktion mehrere optionale und variable Parameter zur Verarbeitung gegeben werden können, klingt das ja nicht unbedingt schlecht.

    Hier eine Idee für die Einsetzbarkeit, natürlich auch anders zu lösen

    PHP
    function validate(...$input, ...$type) {
        // Validierungskriterien
    }


    Hier könnte man in der Funktion für verschiedene Eingabeerwartungen verschiedene Validierungen definieren und diese dann per Array auswählen und auf den jeweiligen Input anwenden.

    Also klar, kann einerseits zur Schlamperei führen, kann andererseits in bestimmten Szenarien auch nützlich sein.
    Ähnlich mit PDO, welches Eingaben von vornherein maskiert um SQL Injections zu unterbinden. Manche denken sich daher, sie müssten eh nix mehr machen, macht ja PDO, aber trimmen uÄ ist trotzdem eigl. noch nötig :D

    Hmm, das heisst dann aber, dass ggf. auf jeder einzuschraenkenden Seite erstmal eine DB Abfrage gestartet werden muss, um den PW Hash zu kriegen, und dann pruefen zu koennen.
    Da finde ich ein einfaches true besser :)

    Aber irgendwie hast du mit deinem Ghostuser auch recht. Hmm, verzwickt. :(

    Idee: $_SESSION["login"] = uniqid("", true);
    Dann kann man in Reverse Engineering die (fast) genaue Zeit auslesen:

    PHP
    //Verdammter Sonnenbrillensmylie
    date("r",hexdec(substr(uniqid(),0,8)));


    Und muss nur noch irgendwo die durch das true generierten Pseudozufallszahlen speichern und abgleichen. Dadurch hat man eine Idee, wann die Session gestartet wurde, und aknn zB nach 2 Std Inaktivtaet rausschmeissen, und gleichzeitig sind die Werte nicht effizient reproduzierbar/wiederverwendbar.
    Einziges Problem: Wo speichern, damit die Abfrage moeglichst schnell geht, da ja immer noch auf jeder Seite gefragt werden muss?

    Andere Moeglichkeit, fuer Fortgeschrittene: PHP Frameworks. Die groessten, bzw. empfohlensten derzeit: Phalcon, Yii, Laravel, CodeIgniter, Symfony. Die sollten alle eine gute Verwaltung mitbringen.
    Zumindest mit Phalcon habe ich mich schonmal ein wenig beschaeftigt, wenn man sich einmal eingearbeitet hat, sind die Viecher wirklich enorm hilfreich!!! Quasi CMS Systeme fuer nativ-Coder xP

    Das Geniale ist ja, das dadurch ein Drittel des Internets unsicher geworden ist. Banken, Paypal, Anmeldungen, Onlineshops, alles, was irgendwie verschlüsselt ist, läuft ja heutzutage mit OpenSSL, zumindest bei 99% der Fälle...

    Und das heißt, keiner hat eine Ahnung wer angegriffen wurde, da nur in Ausnahmekonfigurationen des Servers überhaupt Spuren hinterlassen werden, und keiner hat eine Ahnung, was bei Angriffen abgegriffen wurde, da das immer das ist, was gerade entschlüsselt wurde. Können also Private Keys, Nutzerdaten, Public Keys, ... sein.

    Juhu -_-

    Also, ich habe einen leeren String eingebunden, und du hast das commit nicht übersehen, das hatte ich wirklich vergessen.

    Und warum sollte man noch die ID wollen, es geht doch hier nur um den Login, da braucht man nur Namen und PW? Mehr kriegt man vom Nutzer ja auch nicht?!
    Aber ich kann es natürlich auch ändern.

    Und bei der Session meinte ich, dass sich zum Bsp ein pöser Pube registrieren könnte, einloggen und dann die Session auf seinem Rechner so manipulieren, dass sie nicht mehr einfach nur true enthält, sondern eine Funktion.
    Also $_SESSION['login'] = true wird zu $_SESSION['login'] = function(){echo dbuser . " " . $dbpass;}
    Wenn man nun fragt if($_SESSION['login']), wird dann die Funktion in der manipulierten Session ausgeführt?

    Nee, das was du da beschreibst, nenne ich nicht mehr Loginskript, das ist ja schon eine komplette Nutzerverwaltung. Ich dachte aber, der Login allein passt hier recht schön, um zu zeigen, wie man heutzutage (ungefähr) mit den Passwörtern speziell und der Sicherung allg. umgeht. Und ein Login ist immer noch eines der kürzesten Formulare, da nur zwei Werte (mit Dauerlogin drei) verarbeitet werden.

    Zeile 11: Ups, ok :whistling: Was schlägst du vor? !isset() ?
    Zeile 25: Kann sein, aber so ist es kürzer, da man kein assoziatives Array übergeben muss. Und da nur ein Wert kommt, kann man auch nichts durcheinander bringen. Deswegen mit ?
    Zeile 28: OK, dann gucke ich mal, wie ich die Userprüfung umbaue
    Zeile 36: Das hängt ja mit mit Z. 28 zusammen, ich bin davon ausgegangen, dass auch ein Fehler kommt, wenn nix gefunden werden kann
    Zeile 43: beginTransaction deshalb, weil rollBack nur geht, wenn vorher ein beginTransaction durchgeführt wurde. Und ich habe in Zeile 48 ein rollBack, damit lieber das nicht aufgewertete, komplette PW als ein aufgewertetes, halbes PW drinsteht. Denn ersteres funktioniert bei verify noch, letzteres nicht mehr.
    Zeile 46: Inwiefern die Select query umbauen? Wenn man die SELECT query umbaut, zB andere Spaltennamen, muss man das ja bei update auch machen. Und dann kann man noch kurz bei update die Platzhalternamen mit ändern, und es geht wieder, oder?
    $data ist ja ein ass. Array, mit Spaltennamen als Schlüssel und Zelleninhalt als Wert. Dh, wenn man den Spaltennamen als Platzhalter wählt, klappt das mit $data eigentlich immer, imho.
    Zeile 56: Nun denn, dann kann man das mit der neuen Nutzerprüfung zusammen legen.

    Session: ist nicht so schlimm, aber ich finde es einfach angenehmer, und ist auch leichter zu prüfen und schwerer zu manipulieren. Wenn man immer nur ein if(session) fährt, ist egal, was mitgeliefert wird, es wird immer auf true oder false runtergebrochen, aber sobald man werte prüfen will, müssen diese auch sanitized werden. Oder habe ich da nen Denkfehler?

    Idee, zu prüfen: Wie läuft es eigentlich, wenn man zB selbst eine Funktion baut und diese in die Session setzt? Wird dann bei if($session) die Funktion ausgeführt?
    Wenn die $session zB ein

    PHP
    function() {
        echo $dbpass;
    }

    ist, ist dass ja immer noch true, wird das dann aber auch ausgeführt?

    $pdo = null beendet einfach die PDO DB-Verbindung, ich bin ordentlich :D

    So, ich habe mal ein wenig rumgespielt (mit gutem Vorsatz :D ) und dabei ein komplettes Loginskript zusammengeschraubt, welches (hoffentlich) alle heutztutage möglichen Sicherheitsschleusen eingebaut hat. ACHTUNG!!!: Bisher ungetestet!

    Was bereits inkludiert sein sollte:
    - Prüfen auf Vorhandensein der Eingaben
    - essentielle Daten (DB Verbindung, etc) in externem File (zum Ablegen in gesichertem Ordner)
    - Verbindung via PDO, um SQL Injection vorzubeugen
    - Password API + Pepper für sichere Passwörter
    - automatisches PW Update im Hintergrund
    - vollständige Fehlerfallbacks mit Abfangen der Meldungen

    Was noch eingebaut werden sollte:
    - gesichertes Dauerlogincookie setzen (zB via Token)
    - besserer Sessionumgang

    Was geprüft werden muss:
    - sämtliche oben genannten Punkte
    - Ajax-Kompatibilität
    - insg. die Hackingsicherheit

    Hier nun das Skript und die Konfig-Datei

    wolf: der Satz bei deinem ersten Bsp ist irgendwie irrefuehrend. Denn, wenn der Satz "Bedingung wurde nicht erfüllt." ausgegeben wird, IST die Bedingung $hallo == false schliesslich erfuellt!

    Besser waere 'Bedingung erfüllt, $hallo ist falsch.'
    Hier muessen dann aber einfache Anfuehrungszeichen hin, sonst steht in der Ausgabe anstatt $hallo ein bool(false), denn das ist der Variablenwert.

    iphone: Bis auf das oben wurde das das Ganze schon von wolf gut erklaert, und auch der Link zur Doku ist gut, solltest du dir mal anschauen. Auch die inoffizielle MDN PHP Doc kann vielleicht helfen.

    Der Befehl ist ganz normales CSS:

    CSS
    body {
      width: 90%;
    }


    Und normalerweise werden HTML Dateien auch als .htm oder .html gespeichert und vom Browser nur interpretiert. Die Browser speichern eigentlich nix, allerdings kenne ich Torch nicht.
    Wenn dir der div aber nicht angezeigt wird, hat Torch mMn ein akutes Problem bei der Darstellung von Webseiten, da heutzutage jede einzelne Seite irgendwo einen div verbaut hat. Oder doch zumindest 99.999...9% :D

    Wenn allerdings dir von dir erstellten Dateien NICHT die Endung .htm .html oder .css bei Style tragen, dann ist sowieso was falsch (vermutlich dein Editor), dann musst du die Dateien konvertieren.

    Ich könnte übrigens Virus Shield wärmstens empfehlen, nur, weil das grade so schön zum Thema passt :whistling:

    Und wer sich informieren will: AV-Test News. Es gibt übrigens doch schon so einige Malware für Android, vielleicht wäre da ein Antivirenprogramm sogar eine Überlegung wert. Auch, weil diese immer effizienter werden, siehe Test auf der Seite.

    Für Faule:

    Zitat

    Die kostenlosen Apps von Avira, Qihoo, TrustGo holten alle Bestwerte im Test.

    Aber auch das oben erwähnte Avast ist nicht schlecht. Avira und Avast haben zudem auch einen Diebstahlschutz eingebaut.

    Ich hätte folgendermaßen umgedreht:

    Code
    for zeile in range(world.getSizeX()):
        while not kara.onLeaf():

    Man achte auf die Zeilen :D
    Ich habe allerdings keine Ahnung ob und wie und wann deine Schleifen wieder geschlossen werden, gibts da irgendwas von wegen end while?
    Muss man halt schauen, dass das Drehen am Ende einer Zeile in der richtigen Schleife sitzt.

    Ansonsten habe ich nie mit Pythonkara gearbeitet, in der Schule bei uns wurde mit Robot Karol gelehrt :rolleyes: Hach, diese Emotionen, wenn man mal wieder Pseudocodes sieht ;(

    blöde Frage, wieso nutzt du überhaupt ein div? Man kann einem Element bei CSS 3 auch zwei unabhängige Hintergründe geben, d.h. du kannst deinem HTML einmal den Standard BG und einmal den Drahtbg mit repeat: x; oder so mitgeben, danach den body runterschieben.


    So könnt man es machen, und dann halt auf jeder Seite die backgrounds des HTML überschreiben.
    Also, einmal die Standard Css einfügen und drunter dann im head einen CSS Bereich, der die eigtl. Bilder definiert.

    Definitv und absolut: nein :(

    • Sobald ein Bild in deiner Seite geladen wird, liegt es im lokalen Cache des Browsers und kann da mit einfachen Mitteln entnommen werden
    • Wie basi schon sagte, Screenshot
    • Rechtsklick -> Speichern unter...


    Man kann nur versuchen, es den Scriptkiddies ein bischen zu erschweren da ran zu kommen, zB. via

    • Nur Thumbnails der Bilder direkt auf der Seite anzeigen. Weiterer Vorteil: Trafficersparnis, mobile Nutzer werden dir danken
    • Via .htaccess Hotlinking verhindern / bei Direktaufruf der Bilder auf ein PHP Skript umleiten, was ein Copyright drauflegt. Solche Halbtransparenten auf dem ganzen Bild sind ein ewiges Gefriemel beim Entfernen ...
    • Obiges SOLLTE auch bei Rechtsklicks helfen, aber keine Garantie meinerseits :D
    • Rechtsklicksperre ist nicht zu empfehlen, da der Nutzer einfach JavaScript ausschalten muss, schon ist der Schutz umgangen 8) Und da jede gute Seite auch ohne JavaScript zufriedenstellend laufen sollte, ist nur ein dezenter Hinweis angebracht, dass JS fehlt, kein Overlay auf der gesamten Seite, wie manche Anbieter es gerne machen, um JS zu erzwingen.


    Also, am ehesten hilft dir wahrscheinlich ein Mix aus .htaccess und PHP, ist aber relativ anspruchsvoll, vor allem da .htaccess dir ohne Probleme den Server zerschiesst, wenn was falsch gemacht wurde.

    Ich bin grad richtig stolz, ein ganzer Post ohne einen einzigen Umlaut maskiert zu haben. FU english keyboard 8)

    Jap, Google gibt ja schließlich an, welche Rechte die App will. Und wenn ich zB eine Uhrapp habe, die auf meine Kontakte zugreifen will, mache ich nen Bogen drumrum ;)
    Genauso bei Google Tranlator Beschreibungen ;)
    Also, die Angaben und gesunder Menschenverstand reicht meist.

    Ich habe allerdings von Avast den Diebstahlschutz installiert, zieht kaum am Akku, da er nur auf Befehl wirklich aktiv wird und ist recht nützlich, wenn man das Phone mal verlegt/vergisst/... Kann remotemäßig sperren, klingeln, GPS aktivieren, Speicher löschen, kann hardwarereset resistent konfiguriert werden, ... wobei ein Teil ein gerootetes Telefon braucht.

    Jetzt wirds verwirrend :D

    Die CSS Codeblöcke kann man beliebig im CSS File anordnen, da sie ihren Bezug ja immer mitnehmen. Bsp:

    ABER kommt ein Block zweimal vor, passiert das gleiche, wie beim nächsten beschriebenen:

    Innerhalb dieser Blöcke darf man das nicht:

    Die Befehle werden immer von vorne nach hinten abgearbeitet, d.h., wenn der gleiche Befehl zweimal vorkommt, wird überschrieben. Genauso, wenn zwei Blöcke vorhanden sind.

    Im HTML kommt es auf die Schachtelung an. Neue Tags innerhalb von anderen liegen praktisch über den umschließenden Tags, und verdecken damit auch etwaige Hintergrundfarben.

    CSS
    #block1 {
        background: red;
    }
    
    
    
    
    #block2 {
        background: blue;
    }

    Soweit klar?
    Richtig gemein wird es dann mit komprimierten CSS Befehlen (zB anstatt border-style, border-width, border-color einfach nur border) Und Schriftarten/-größen. Letztere zB überschreiben auch über CSS Codeblöcke hinweg. Aber das blicke ich selber manchmal nicht mehr ;)