Robert Bienert: Könnt Ihr euch mal den Code für das Gästebuch ansehen?

Beitrag lesen

Moin!

so hab mich mal in Perl versucht. Könnt Ihr euch das mal ansehen und sagen was man da anderes machen könnte?

Perl Datei:

Code:

#!c:/Perl/bin/perl -w ### Aufruf des CGI-Moduls ### use CGI qw(:standard); use Fcntl qw(:flock); use strict; ### Gaestebuch öffnen ### my $gaeste = "../htdocs/gaestebuch.html"; open(GAESTEBUCH,"+< $gaeste") or die "Das Gaestebuch konnte nicht geöffnet werden !\n"; flock(GAESTEBUCH,LOCK_EX); ### Einlesen der Formulardaten ### my $name = param('eingabe'); my $E_Mail = param ('E_Mail'); my $kommentar = param('kommentar'); ### Eintrag ins Gaestebuch ### my $neueintrag = <<HERE_TEXT; <P> $name<BR> $E_Mail </P> <H4>Kommentar:</H4> <P><i>$kommentar</i></P> <HR> HERE_TEXT seek(GAESTEBUCH, -16,2); print GAESTEBUCH "$neueintrag\nZur&uuml;ck zum <A HREF =\"../formular.html\">Eingabeformular.</A>\n<BODY>\n</HTML>"; close(GAESTEBUCH); ###Dankeseite ### my $danke =<<HERE_TEXT2; Content-type:text/html <HTML> <HEAD> <TITLE>Dankeseite</TITLE> </HEAD> <BODY> <H1>Hallo $name!</H1> <H4>Danke f&uuml;r Deinen Eintrag ins Gaestebuch.</H4> <HR> <P> Wenn Sie die Eintraegee im G&auml;stebuch<BR> lesen wollen klicken Sie bitte <A HREF="../gaestebuch.html">hier</A>zur&uuml;ck.</P> </BODY> </HTML> my $danke =<<HERE_TEXT2; HTTP 1.1 200 OK Content-type:tex print $danke; t/html

Abgesehen davon, dass Einzeiler in Perl auf Grund der Shebang-Zeile nicht viel anstellen kann und dir in der Ausgabe des HTTP-Headers wohl ein paar Steuerzeichen die Ausgabe verhauen haben, sehe ich dicke Cross-Site-Scripting- und HTML-Injektion-Lücken, weil du $name, $kommentar, … ungeprüft ins Gästebuch schreiben lässt. Damit kann jeder seine Postings mit HTML und JavaScript aufpeppen – und deinen Besuchern viel Ärger machen.

Um dir vorzuführen, was die Forengemeinschaft von dir will, habe ich deinen Perlcode einmal vom Forum farbig darstellen lassen: Wie du bei einem Blick in den HTML-Code dieser Seite siehst, ist der komplette Perlcode als Shebang ausgezeichnet.

Hmm hier dann das Eingabeformular:

HTML-Code:

<HTML> <HEAD> <TITLE> Gästebuchformular</Title> <script language = " JavaScript"> <!-- function checkForm (form) { if(form["eingabe"].value =="") { alert ( "Bitte geben Sie Ihren Namen ein!"); return false; } return true; } //--> </script> </HEAD> <Body> <H1>Eingabeformular </H1> <FORM METHOD ="post" action="/cgi-bin/gaestebuch.pl" on Submit ="return checkForm(this);"> <HR> <TABLE> <TR> <TD> Bitte gehen Sie Ihren Namen ein:</TD> <TD><INPUT TYPE = " text" name = "eingabe" size = "50"></TD> </TR> <TR> <TD>&Uuml;ber Ihren Kommentar zur <BR> Web-Site und konstruktive <BR> Kritik bin ich dankbar: </TD> <TD><TEXTAREA Type = "text" name = "kommentar" rows = " 8" cols = "25"> </TEXTAREA></TD> </TR> </TABLE> <HR> <INPUT type = "submit" value= "Eintragen"> <INPUT type = "reset" value = "L&ouml;schen" > <HR> <P> Klicken sie <A HREF="gaestebuch.html">hier</A> um die <BR> bisherigen Eintr&auml;ge im G&auml;stebuch zu lesen. </P> </FORM> [i][/i]

Da fehlt ein Doctype und statt <script language = " JavaScript"> (wieso eigentlich mit Leerzeichen zwischen Attribut und Wert?) heißt das nun <script type="text/javascript">

Generell empfehle ich – was auch schon meine von dir abgekanzelten Vorredner dir versucht haben mitzuteilen – den Code sauber und übersichtlich zu schreiben, weil das schon die halbe Miete bei der Vermeidung von (gravierenden) Fehlern sein kann. Falls du meinst, durch den Verzicht auf Newlines Übertragungszeit und Bandbreite zu sparen, da gibt es bessere Methoden.

Viele Grüße,
Robert

-4 53

Könnt Ihr euch mal den Code für das Gästebuch ansehen?

Knuffel82
  • perl
  1. 0
    Cheatah
    1. -1
      Knuffel82
      1. 0
        wahsaga
        1. -1
          Knuffel82
          1. 0
            Christoph Schnauß
            1. -10
              Knuffel82
              1. 0

                lesbare postings verfassen

                Christoph Schnauß
                • meinung
                1. -11
                  Knuffel82
                  1. 0
                    Hopsel
                    1. -1
                      Ulrich
                      1. 0
                        Stonie
                        1. 0
                          Christoph Schnauß
                          1. 0
                            Frank (no reg)
                        2. 0
                          Ulrich
                      2. 0
                        wahsaga
                  2. 0
                    Frank (no reg)
                    1. -5
                      Knuffel82
                      1. 0
                        Hopsel
                      2. 0
                        Onkel Schnitzel
                        1. -3
                          Knuffel82
                      3. 2
                        wahsaga
                      4. 4
                        Vinzenz Mai
                        1. -1
                          Knuffel82
                          1. 2
                            Vinzenz Mai
                          2. 5
                            Thomas J.S.
                            1. 0
                              Mathias Bigge
                      5. 0
                        Orlando
                  3. 0
                    Ashura
                    1. 0
                      Christoph Schnauß
                  4. 1
                    Christoph Schnauß
                    1. 2
                      Thomas J.S.
                      1. 0
                        Christoph Schnauß
                        1. 3
                          Thomas J.S.
                          1. 1
                            wahsaga
                  5. 0
                    Auge
                  6. 0
                    Dennis
                    • menschelei
                    1. 0
                      Ashura
                  7. 0

                    *g* zur Wochenmitte

                    Marian
                    1. 0
                      Vinzenz Mai
                      1. 0
                        Marian
                        1. 0
                          Gunnar Bittersmann
              2. 0
                Hopsel
                1. -2
                  Knuffel82
                  1. 0
                    chr..itz
  2. 3

    # Kommentare in Perl

    Vinzenz Mai
    1. 0
      Christoph Schnauß
  3. 7

    Aus unserer beliebten Serie "Schöner Posten"

    Stonie
    • zur info
  4. 4
    Robert Bienert
  5. 1

    Herzlichen Glückwunsch

    Alexander Brock
    1. 0
      Gunnar Bittersmann
      • menschelei
  6. 0
    TomIRL
    1. 0
      Danny