Das längste Thema

  • m_ueberall Zusatz wenn man preg_replace an Stelle von preg_match verwendet, dann sollte es schon so gemacht werden ...

    PHP
    1. if ( preg_replace('/[^a-zA-Z0-9\-]/', '', $_GET["var"]) == $_GET["var"] );
    2. else
    3. {
    4. ... // errorpage
    5. exit;
    6. }

    weil dass ich nach dieser "Unprüfung" das $_GET["var"]  konsequent nirgends mehr verwendet wird,

    glaub'ich nicht, dazu kenn ich meine Pappenheimer nur zu gut;

  • KB19 wenn das hier === an Stelle von == braucht,

    dann schmeiß besser den ganzen PHP-Kram hin, weil der taugt dann genau NULL:P


    ich hoff ja doch dass preg_replace einen String und keinen Scheibenkleister als Rückgabe-Typ hat;^^


    man muss es net übertreiben und == als ätzend betrachten und nur noch === verwenden;;)

  • FYI: Wer das APT-Repository ppa:ondrej/php verwendet, sollte vor dem/beim nächsten Update auf die Installation zusätzlicher Pakete verzichten und eine manuelle Ersetzung einiger zuvor unversionierter durch versionierte Pakete vornehmen (ansonsten kann es Probleme mit Nextcloud o. ä. geben), siehe Issue #1465: "Unversioned PECL (apcu, msgpack, memcached, ...) extension packages install all PHP versions".

  • Eine "simple" Frage und Zack Diskussion entfacht ... Spaß bei Seite, mir ging es wirklich nur darum ob man trotz der gefilterten Variable noch Schadcode (z.B. Sonderzeichen, de-/encode o.ä.) einschleusen könnte. Falls jemand hierzu noch explizite Ansätze hätte, gerne melden!


    Trotzdem danke an alle Beteiligten. :*

  • ich hoff ja doch dass preg_replace einen String und keinen Scheibenkleister als Rückgabe-Typ hat;^^

    Du hast das Problem mit der schwachen Typisierung bei PHP offenbar nicht verstanden.


    Nein, ich erkläre es Dir an dieser Stelle nicht. Dafür ist mir meine Zeit zu schade. Und JA, um es vorwegzunehmen, PHP ist manchmal so richtig grauslich. Wer auf Nummer sicher gehen will, arbeitet in PHP wenigstens annähernd typsicher, wobei an === und dem expliziten casten von Variablen (besonders Usereingaben in GET/POST, das könnten Arrays sein!) kein Weg vorbei führt.


    Wobei, wenn ich darüber nachdenken, passt Dein Code eh so richtig ins typische PHP-Konzept. :D

  • KB19 doch ich hab es schon verstanden, und genau diese Sache ist ein hervorragendes Beispiel dafür welcher Designfehler in PHP unterlaufen ist;


    es geht um das, und an Stelle des Vergleichsoperators mach ich jetzt einfach §

    PHP
    1. if ( preg_replace('/[^a-zA-Z0-9\-]/', '', $_GET["var"]) § $_GET["var"] );
    2. else
    3. {
    4. ...
    5. }

    an Hand der Regexp sollen Zeichen welche weder Buchstaben (Groß- od. Klein-) noch Ziffern oder - sind,

    herausgefiltert werden;


    interessant ist der Fall in dem tatsächlich ausschließlich Ziffern in $_GET["var"] vorkommen;

    f. den Fall, dass hier PHP meint¹, dass dies ein Integer ist, passiert mit === eher ein Murx als was sinnvolles;

    warum?

    links davon hast einen String und rechts einen Integer, und eben weil des nicht passt gilt der else-Zweig(!)

    obwohl es aber vollkommen korrekt wäre, sind ja nur Ziffern ...;

    darum empfehle ich hier == und nicht ===;


    ¹ wenn nicht im aktuellen Release, dann vielleicht in einem zukünftigen Release;


    und genau diese Dinge, welche im PHP-Konzept mit dem 'schwachen Typisierung' einhergehen,

    machen diese Sprache aus; auch wenn die Syntax der von C sehr ähnlich ist, ist sie dennoch grundverschieden;

    z.B. ein strtol wird man in PHP vergeblich suchen, ebenso die Umkehrung ltoa ;


    darum auch die unterschiedlichen Operatoren, welche es in z.B. in C nicht braucht;


    PHP
    1. $i = 2;
    2. $j = 3;
    3. echo $i . $j; // 23
    4. echo $i + $j; // 5


    es muss jeder f. sich entscheiden, ob er auf dem Layer in PHP programmiert, oder Benutzereingaben gehärtet z.B. mit PUT statt GET und mittels CGI-Script - kann ein C Programm sein - abfängt/absichert;

  • ich installiere und administrieren alle meine server ausschließlich mit bash scripten. [...] das geht mit andible sicher genau so gut, wenn nicht sogar besser

    Mit Sicherheit. Ich habe mich vor 2-3 Jahren mit ansible beschäftigt und meine Installationen in Configs gegossen, seitdem diverse Server damit in Sekunden neu aufgesetzt. Jetzt seit Debian Buster klappts auf einmal nicht mehr, irgendwelche unterschiedlichen/falschen Python-Versionen kommen sich in die Quere, nichtssagende Fehlermeldungen und vor Monaten bestellte netcup-Server liegen immer noch ausgeschaltet rum weil ich noch nicht die Zeit hatte alles wieder gradezubiegen. Achso, irgendwann müsste ich auch die drölf Deprecation-Warnings mal angehen die seitdem munter aufgetaucht sind. Mit anderen Worten, am besten ich mache wohl alles noch mal neu ||


    Oder steige auf Bash-Skripte um. Manchmal ist der einfache Weg vielleicht doch der bessere. Als Software-Entwickler kenne ich es nur zu gut, dass sich eingesetzte Sprachen und Frameworks weiterentwickeln und man hin und wieder Anpassungen vornehmen muss. Als hauptberuflicher Sysadmin würde ich das sicher auch problemlos mit ansible machen. Bin aber keiner, also brauche ich vielleicht ein Tool, das besser zu mir passt.

  • interessant ist der Fall in dem tatsächlich ausschließlich Ziffern in $_GET["var"] vorkommen;

    f. den Fall, dass hier PHP meint¹, dass dies ein Integer ist, passiert mit === eher ein Murx als was sinnvolles;

    Das passiert aber nicht, da die GET/POST Arrayelemente garantiert Strings oder ein Array aus Strings sind. Bzw. wären wir da genau bei jenem Punkt, den ich angesprochen habe: Explizit casten rettet einem manchmal den Arsch! :)


    $_GET['foobar'] = isset($_GET['foobar']) ? (string) $_GET['foobar'] : ''; // Wobei ich persönlich lieber NULL statt einem leeren String verwende.


    Die schwache Typisierung bei PHP ist Fluch und Segen zugleich. Ich persönlich sehe sie mittlerweile fast nur noch als großen Fehler. Denn letzten Endes wird es dadurch leichter, dass man gravierende Bugs einbaut. Aber PHP ist dennoch auf einem guten Weg, an vielen Stellen besser zu werden. Damit steigt allerdings die Einstiegshürde.

  • Denn letzten Endes wird es dadurch leichter, dass man gravierende Bugs einbaut.

    das ist egal, denn jede Programmiersprache hat ihre Tücken; Dein Beispiel zeigt nämlich auch, was typisch f. quick and dirty ist;

    im Falle wenn Du statt '' wirklich NULL verwendest, ist es sogar sinnlos,

    denn wie Du ja sagtest GET/POST Arrayelemente sind garantiert Strings und unset bzw. das explizite setzen auf NULL

    machen bei isset keinen Unterschied =O

    nebenbei: macht man das auch nicht; es würde auch keiner in C auf die Idee kommen argc bzw. argv zu ändern;

    (auch wenn es Variablen sind, sollte man als Programmierer diese dennoch so wie Konstanten behandeln - nur lesen und nicht ändern)

    PHP
    1. $x = NULL;
    2. var_dump( $x );
    3. var_dump( isset( $x ) ); // die Notwendigkeit von var_dump ist hier ebenfalls Murx:
    4. echo isset( $x ); // hier wird nichts(!) ausgegeben
    5. $x = 0;
    6. var_dump( $x );
    7. var_dump( isset( $x ) );
    8. echo isset( $x ); // hier wird aber seltsamerweise '1' ausgegeben, konsequent sieht anders aus ...
    9. // bei PHP ist mehr Murx, nicht nur das Konzept der schwachen Variablentypisierung;
  • Sagt mal, kennt such hier wer mit Teleskopen aus?


    Ich überlege meiner besseren Hälfte eins zum Geburtstag zu schenken. Den Mond fand sie schon immer faszinieren aber ich bin mir nicht sicher wie groß das Interesse am Ende ist 😂


    Suche also ein Teleskop was sowohl Anfänger freundlich ist, aber auch in der Lage ist beispielsweise die Ringe vom Saturn oder Nebel zu sehen.


    Hab nen paar Teleskope um die 100€ gefunden aber bin recht skeptisch. Andere liegen bei knapp 200 bis 300€ und machen nen sehr guten Eindruck. Man kann anscheinend auch ein paar Tausend Euro dort versenken.... macht aber wohl für den Anfang wenig Sinn 😅


    Also bin für alle Empfehlungen offen und dankbar 😊

  • Ich würde vielleicht eher noch versuchen herauszufinden, wie ernst es ihr bei der Sache ist. Ein mieses Teleskop kann einem die Sache schnell verleiden und ein teureres, das mangels Interesse in der Ecke steht, bringt euch beiden nicht viel Freude. Sie interessiert sich nach ein paar Tagen nicht mehr dafür und du hast eine Stange Geld versenkt. Welche Vergrößerung du für welche Beobachtungen in etwa brauchst, können dir meist Wikipedia oder einschlägige Webseiten sagen. Also z.B. Saturnringe ab ca 40x. Eine motorische Nachführung wäre sicher hilfreich, insbesondere wenn man Bilder machen will. Die Erde dreht sich schneller als man denkt. Eine größere Öffnung ist natürlich bei Beobachtungen am Nachthimmel sicher auch förderlich. In der Großstadt mit ihrer "Lichtverschmutzung" ist man sowieso schnell am Ende der Fahnenstange. Aber wie das halt so ist in der Optik, das kann alles sehr schnell sehr teuer werden. Das sage ich aus leidvoller Erfahrung, wenn ich meine Fotoobjektive so anschaue. Eine Blende mehr kann da beim Preis, aber auch beim Gewicht, schnell einen Faktor 2-4 ausmachen. Meist sogar eher mehr, weil dann auch die (optische und mechanische) Qualität in der Regel höher ist.