Schrift
[thread]611[/thread]

Hilfe bei Stringdurchforstung: gästebuch einträge ohne url

Leser: 1


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Gast Gast
 2005-11-18 12:21
#6027 #6027
Ich habe eine gästebuch (Matt wright)
und möchte aufgrund von extremen spamaufkommen, das ganze so umbauen, dass alle einträge die einen link in ihren comment einbauen, automatisch gelöscht werden.

hier der code von dieser funktion, das url feld ist kein problem,
den code hab ich schon entfernt, es geht mir darum,
dass vorher überprüft werden soll, ob im comment feld ein http oder www vorkommt und wenn ja, dann dieser eintrag nicht eingetragen wird bzw. auch keine emails verschickt werden (an den webmaster und den eintragenden).

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Open Link File to Output
open (GUEST,">$guestbookreal") || die "Can't Open $guestbookreal: $!\n";

for ($i=0;$i<=$SIZE;$i++) {
  $_=$LINES[$i];
  if (/<!--begin-->/) {

     if ($entry_order eq '1') {
        print GUEST "<!--begin-->\n";
     }
 
     if ($line_breaks == 1) {
        $FORM{'comments'} =~ s/\cM\n/<br>\n/g;
     }

     print GUEST "<b>$FORM{'comments'}</b><br>\n";
     
        print GUEST "$FORM{'realname'}";


     if ($FORM{'username'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
         $FORM{'username'} eq '' ||
         $FORM{'username'} !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) {
           print GUEST " &lt;$FORM{'username'}&gt;";
     }
     else {
        if ($linkmail eq '1') {
           print GUEST " \&lt;<a href=\"mailto:$FORM{'username'}\">$FORM{'username'}</a>\&gt;";
        }
     }

     print GUEST "<br>\n";

     if ( $FORM{'city'} ){
        print GUEST "$FORM{'city'},";
     }
   
     if ( $FORM{'street'} ){
        print GUEST " $FORM{'street'}";
     }

     if ( $FORM{'country'} ){
        print GUEST " $FORM{'country'}";
     }

     if ($separator eq '1') {
        print GUEST " - $date<hr>\n\n";
     }
     else {
        print GUEST " - $date<p>\n\n";
     }

     if ($entry_order eq '0') {
        print GUEST "<!--begin-->\n";
     }

  }
  else {
     print GUEST $_;
  }
}

close (GUEST);


ich kenn mich zwar in c halbwegs gut aus und ein bischen in php, aber perl is nicht mein gebiet, deswegen vielen dank an alle die mir hier weiterhelfen.

liebe grüsse
günter
betterworld
 2005-11-18 13:11
#6028 #6028
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Guest,18.11.2005, 11:21]Ich habe eine gästebuch (Matt wright)[/quote]
Matt Wright ist nicht empfehlenswert. Das steht inzwischen auch auf seiner Seite. Dein Script zum Beispiel sieht so aus, als ob nicht auf Locking geachtet wird.

Zu Deiner Frage: Pruefe z. B. mit index (oder auch mit einem Regexp, wie es Dir lieber ist), ob der gesuchte String im comment vorkommt, und wenn ja, brichst Du den Schleifendurchlauf mit "next" ab.
Rocco
 2005-11-18 14:32
#6029 #6029
User since
2005-11-18
37 Artikel
BenutzerIn
[default_avatar]
Obiger Beitrag war von mir, lustig das man zwar neue beiträge erstellen darf aber nicht antworten als gast.

könnte das so aussehen

if (index $FORM{'comments'} http || www)
next;

wahrscheinlich nicht, bitte um korrektur der syntax weil ich wie gesagt nicht viel tau von perl habe.
Strat
 2005-11-18 15:42
#6030 #6030
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
lies dir mal perldoc -f index durch... da siehst du, dass die auswertung so nicht geht.

und wenn du http || www schreibst, meint das, dass versucht wird, eine subroutine namens http auszufuehren (wenn es die nicht gibt => Fehler), und wenn die einen falschen wert zurueckgibt, wird versucht, die subroutine www auszufuehren. aber auch bei "http" || "www" wird immer nur http fuer index verwendet, d.h. du brauchst zweimal index...

und such mal auf http://www.sourceforge.net/ nach dem Projekt nms, die bieten vernuenftige replacements fuer viele von Matt's scripten... dann brauchst du dir selbst weniger arbeit zu machen und stolperst nicht ueber fallen, an denen sich schon tausende anderer blutige nasen geholt haben...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Rocco
 2005-11-18 16:06
#6031 #6031
User since
2005-11-18
37 Artikel
BenutzerIn
[default_avatar]
danbe für die anregung, könntet ihr mir nicht die funktionierende syntax für dieses statement verraten??

ich möchte nicht unverschämt sein, aber erstens hab ich keine entwicklungsumgebung für perl und wenn ich das online teste (was ich versucht habe) krieg ich nur internal server errors was mir bei der fehlersuche nicht weiterhilft.

ausserdem möchte ich dieses (matt wright) script weiterverwenden weil es für mehrere seiten gleichzeitig angewendet wird und ich bei einer neuimpementation komplett überfordert wäre.

noch dazu möchte ich auch perl nicht lernen "nur" wegen dieses problems, denn für einen der sich auskennt wird obiges statement nicht mal eine minute in anspruch nehmen, sicher nicht länger als das verweisen auf hilfe dateien.

danke gruss
rocco
betterworld
 2005-11-18 16:43
#6032 #6032
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Rocco,18.11.2005, 15:06]ich möchte nicht unverschämt sein, aber erstens hab ich keine entwicklungsumgebung für perl und wenn ich das online teste (was ich versucht habe) krieg ich nur internal server errors was mir bei der fehlersuche nicht weiterhilft.[/quote]
Wenn Du an den Anfang des Scriptes "use CGI::Carp qw(fatalsToBrowser);" schreibst, muesstest Du statt der 500er-Fehler vernuenftige Fehlermeldungen sehen. So kannst Du leicht weiterentwickeln.

Wenn Du bei Matts Gaestebuch bleibst, liebst Du das Risiko ;)
Das von Strat erwaehnte nms-Archiv nimmt Dir die Arbeit ab, alles noch einmal zu entwickeln.\n\n

<!--EDIT|betterworld|1132325041-->
Strat
 2005-11-18 16:44
#6033 #6033
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn du im script von matt keine groesseren aenderungen vorgenommen hast, kannst du es 1:1 durch was von NMS ersetzen; das verwendet dieselben externen schnittstellen. Ich habe wenig Lust, bei Problemen mit Matt's Scripten zu helfen, wenn es dasselbe in gut, sauber und sicher nur ein paar Mausklicks weiter gibt. Vermutlich stoesst du schon bald auf das naechste Problem oder die naechste Sicherheitsluecke, und dann wird's immer komplexer, weil das Fundament nicht passt, und alles stuerzt ein... und das kostet dann richtig Zeit.

index gibt -1 zurueck, wenn nichts gefunden wurde, sonst die position, an der was gefunden wurde (0 wuerde dem anfang des strings, also dem ersten zeichen entsprechen).
Code: (dl )
1
2
3
4
5
6
if (-1 == index($FORM{'comments'}, 'http') 
or
-1 == index($FORM{'comments'}, 'www')
) {
# ... mach was
}


Dazu empfehle ich auch meine "Einfuehrung in Perl", die du von meiner HP unter Vortraege downloaden kannst.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Rocco
 2005-11-18 17:10
#6034 #6034
User since
2005-11-18
37 Artikel
BenutzerIn
[default_avatar]
danke damit müsst ichs hinkriegen.
ich muss vorerst dieses script weiterverwenden, weil es eben von der originalversion schon sehr weit entfernt ist und von dem vorherigen webmaster für mehrere seiten ausgelegt wurde, die alle auf das selbe script zugreifen.
wenn ich ein anderes verwenden nehme, würde ich ein php script nehmen (da gibt es zB auch die adaption von matt wrights guestbook) weil ich mich damit viel besser auskenne.
Rocco
 2005-11-18 22:13
#6035 #6035
User since
2005-11-18
37 Artikel
BenutzerIn
[default_avatar]
fuck fuck fuck - ich hasse perl!!!!!!
bin grad auf 1000000
hatte es hinbekommen, alle einträge mit www oder http wurden automatisch übersprungen, hat funktioniert.
natürlich nicht auf anhieb aber nach einigen INTERNAL SERVER ERRORS hats geklappt.

jetzt hatt ich grad die glorreiche idee noch einen zähler einzubauen um die anzahl der spam versuche zu protokollieren.
aber ausser Internal fucking errors hab ich nix bekommen, was ja ansich nicht so schlimm wäre, nur nach entfernen des counters, geht das guestbook leider auch nicht mehr, das einzige was kommt sind INTERNAL SERVER ERRORS obwohl alles wieder so ist wies vorher war - natürlich von vorher keine sicherung denn wer rechnet damit das genau das selbe script das vorher funktioniert hat, nachher nicht mehr geht.

sprich dieser tipp mit
use CGI::Carp qw(fatalsToBrowser);"
hat nicht funktioniert und mir steht bis oben mit dem scheiss
Ronnie
 2005-11-18 22:26
#6036 #6036
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=Rocco,18.11.2005, 21:13]fuck fuck fuck - ich hasse perl!!!!!!
(...)
hat nicht funktioniert und mir steht bis oben mit dem scheiss[/quote]
http://www.php.net/
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-11-18 12:21.