URL shortener auf EiWoMiSau

  • Ich habe mir da mal selbst was gebaut, habe das in einem kleinen Webhosting laufen.


    Das ist prinzipiell nur eine PHP Datei die ziemlich rustikal ist. Als Backend hab ich da ne MySQL Datenbanktabelle benutzt.

    SQL: links.sql
    CREATE TABLE `links` (
      `ID` int(11) NOT NULL,
      `link` varchar(1024) NOT NULL,
      `short` varchar(3) NOT NULL,
      `timestamp` int(11) NOT NULL
    ) DEFAULT CHARSET=latin1;


    Macht bei mir was er soll und arbeitet zuverlässig. Aber ohne Gewähr... :P

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • whoami0501 Ich wollte gerade was über Prepared Statements und SQL Injections schreiben. Mittlerweile hast Du da größtenteils nachgebessert :) :thumbup:


    Aber leider ziehst Du bei redirect.php noch immer keinen Vorteil aus den Prepared Statements. Du prüfst die Variable zwar deutlich besser, fügst sie aber immer noch direkt in den Query ein. Das Thema XSS solltest Du Dir trotzdem noch einmal ansehen! Du könntest die URL auch einmal durch parse_url() o.ä. jagen.


    Tipp: Du musst das Statement beim Insert nicht bei jedem Schleifendurchlauf neu erstellen. Der Vorteil von Prepared Statements ist ja gerade, dass man den Query einmal vorbereitet und in der Schleife quasi nur die Variable aktualisiert. Das spart bei größeren Dingen deutlich Ressourcen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • whoami0501 Ich wollte gerade was über Prepared Statements und SQL Injections schreiben. Mittlerweile hast Du da größtenteils nachgebessert :) :thumbup:


    Aber leider ziehst Du bei redirect.php noch immer keinen Vorteil aus den Prepared Statements. Du prüfst die Variable zwar deutlich besser, fügst sie aber immer noch direkt in den Query ein. Das Thema XSS solltest Du Dir trotzdem noch einmal ansehen! Du könntest die URL auch einmal durch parse_url() o.ä. jagen.


    Tipp: Du musst das Statement beim Insert nicht bei jedem Schleifendurchlauf neu erstellen. Der Vorteil von Prepared Statements ist ja gerade, dass man den Query einmal vorbereitet und in der Schleife quasi nur die Variable aktualisiert. Das spart bei größeren Dingen deutlich Ressourcen.

    Huch, verdammt. Ist gefixt.


    Ich muss dazu sagen, dass ich das gebaut habe, als ich noch ein blutiger Anfänger in PHP und Co. war. Gestern abend habe ich das ganze ja nochmal überarbeitet und da ist mir die Stelle wohl durch die Lappen gegangen. Jetzt sollte es stimmen.


    Über parse_url kann man sich jetzt streiten - ich wüsste nicht, wie ich da zusammen mit meinen RegEx Tests noch einen Mehrwert rausholen sollte... :/


    EDIT: Ein XSS Angriff wird eigentlich schon dadurch ausgeschlossen, dass die script-src in der CSP auf none steht. Ich schaue mir das Thema aber trotzdem nochmal an.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Hier noch der Code von dem Shortlinker, den ich unter anderem in der Signatur hier im Forum benutze:


    https://github.com/perryflynn/huepf


    • Datei-Basiert (keine Datenbank)
    • Entfernt Referer vor dem Redirect
    • Das sehr rudimentäre Admin Panel ist via .htaccess geschützt


    Demo: https://hüpf.net/laengstes

    Hier sieht man, dass der Referer wirklich entfernt wird: https://hüpf.net/req