Zum Inhalt springen

[Lösung] CHC_Forum mit Captcha Funktion

Erstellt am 3. Juli 2007 · 14 Antworten · letzte Antwort am 30. November 2007

Tags: PHP, Sicherheit, Tipp

nicolaibassdh ·

WICHTIGER HINWEIS!!!

Der von mir im ersten Teil angezeigte Code für die Datei captcha.php ist nicht ganz vollständig, hier der korrekte und vollständige Code:

<?php
session_start();
function strrand($length)
{
	$str = "";

	while(strlen($str)<$length){
	$random=rand(48,122);
	#if( ($random>47 && $random<58-)  ){
	if (ereg('[A-Za-z]',chr($random)))
		$str.=chr($random);
	#}

	}

	return $str;
}

$imgHeight = 20;
$imgWidth = 50;

$text = $_SESSION['tx_captcha_string'] = strrand(5);
$img_number = imagecreate($imgWidth,$imgHeight);
$backcolor = imagecolorallocate($img_number,244,244,244);
$textcolor = imagecolorallocate($img_number,0,0,0);
$white = imagecolorallocate($img_number, 0xFF, 0xFF, 0xFF);

imagefill($img_number,0,0,$backcolor);

Imagestring($img_number,5,1,1,$text,$textcolor);

        //some obfuscation
        for ($i=0; $i<2; $i++) {
            $x1 = rand(0, $imgWidth - 1);
            $y1 = rand(0, round($imgHeight / 10, 0));
            $x2 = rand(0, round($imgWidth / 10, 0));
            $y2 = rand(0, $imgHeight - 1);
            imageline($img_number, $x1, $y1, $x2, $y2, $white);

			$x1 = rand(0, $imgWidth - 1);
            $y1 = $imgHeight - rand(1, round($imgHeight / 10, 0));
            $x2 = $imgWidth - rand(1, round($imgWidth / 10, 0));
            $y2 = rand(0, $imgHeight - 1);
            imageline($img_number, $x1, $y1, $x2, $y2, $white);
    }


header("Content-type: image/png");
imagepng($img_number);
?>

Besten Dank an latschma der mich hierauf hinwiesen hat 🙂

latschma ·

Funktioniert mit der captcha.php von nicolaibassdh genausogut. Vielen Dank.

Noch eine kleine Richtigstellung; der Pfad ist richtig:
/ext/chc_forum/pi1/class.tx_chcforum_form.php

latschma ·

Wichtig:

Das captcha von Bernhard Kraft verträgt sich NICHT mit "Flexform based IFrame ffiframe 1.1.0". Captcha wird nicht dargestellt und bei direkter Ansteuerung über http://domain.tld/typo3_src/typo3conf/ext/captcha/captcha/captcha.php gibt es diese Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at /share/storage/01/ff/name/typo3_src/typo3conf/ext/ffiframe/ext_localconf.php:18-) in /share/storage/01/ff/name/typo3_src/typo3conf/ext/captcha/captcha/captcha.php on line 193
‰PNG &#65533;&#65533;&#65533; IHDR&#65533;&#65533;&#65533;_&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;`“¶&#65533;&#65533;&#65533;9PLTE3™Ì&#65533;&#65533;&#65533;ÀÀÀ&#65533;&#65533;&#65533;3™Ì&3Lf,…²¨¨¨xxxHHH```000_&r™9L÷ êP&#65533;&#65533;ùIDATH‰­T‰’¬ ¤H\¢øÿ» ÇÝWó–ª)H:îˆ_,‰ë›¼Ìj•£¿Ç]Ôù?èïcÞ_z¹·—áu%€ðgäÇBs‰&ü%ø>e®t™ œ°ø+æBèt®»\”`A)‰_J¥7Ã!òëÛ yˆlp2ühQ1È%xÚ úAö–¹(`ྔÎS :4€\<*C]]OgÒåÕ¹Ú¿NFÌúd;€ïð# ÅNóÁ&#65533;˜ó¸µL@g$€Í pˆ¢ m‡ HŸw™º §.S³Ê‘¾2³Åßa–ÔÞA©¶[ã5bo8຦[PÅ¿\;Î\¦ùoä‡m²¤k å!=Îò z‘ê_djMh‹ãüLCbˆlß§ƒ˜¯O8îdS^ðOA›Þ¬>UåC ÛêLµ ±?ô[dϵIùØíÃ0P¶×Ér-PÓu`^ðePÄô:Zô

Es hilft nur die Deinstallation über das Backend.

Das normale captcha funktioniert in diesem Fall.

Grüße

steffenk ·

Das ist aber ein Fehler der "Flexform based IFrame ffiframe 1.1.0"

Wie die Fehlermeldung besagt, erfolgt hier eine Ausgabe. Da mir ansonsten keinerlei Unverträglichkeiten bekannt sind, würde ich die mal untersuchen.

Was steht bei der denn in der ext_localconf.php, Zeile 18?

latschma ·
steffenk schrieb

Das ist aber ein Fehler der "Flexform based IFrame ffiframe 1.1.0"
Was steht bei der denn in der ext_localconf.php, Zeile 18?

Da gibt es nur 15 Zeilen, wobei die zweite Zeile von mir eingefügt ist:

<?php
ini_set("max_execution_time", "200");
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');

t3lib_extMgm::addUserTSConfig('
	options.saveDocNew.tx_ffiframe=1
');

  ## Extending TypoScript from static template uid=43 to set up userdefined tag:
t3lib_extMgm::addTypoScript($_EXTKEY,'editorcfg','
	tt_content.CSS_editor.ch.tx_ffiframe_pi1 = < plugin.tx_ffiframe_pi1.CSS_editor
',43);

t3lib_extMgm::addPItoST43($_EXTKEY,'pi1/class.tx_ffiframe_pi1.php','_pi1','list_type',1);
?>

Grüße

steffenk ·

dann hast Du Extra-Zeichen hinter dem ?> - je nach Editor kann das passieren, und es passt zu der Fehlermeldung.

latschma ·

Das wars dann auch schon. Drei leere Zeilen entfernt (CrimsonEditor zeigt die nicht an).
Jetzt geht es mit beiden zusammen.
Vielen Dank. :o

latschma ·

So, jetzt haben die Spammer angefangen manuell saftige Beiträge ins Forum zu schreiben. Das lässt sich bei mir auf IPs in China eingrenzen (haben die nichts anderes zu tun?).

Bei dem ISP geht es leider nicht mit .htaccess die Ausführung von php-Skripten zu verhindern. Man kann das Ausführen von php-Skripten nicht mit .htaccess verhindern, da es auf cgi läuft.

Gibt es eine Methode IPs, IP-ranges und domains via php-Skripts im CHC-forum auszusperren?

Danke.

latschma ·

Hallo

Kann das inzwischen Dank Hilfe beantworten.

Code am Ende der Haupttemplate einfuegen:

[IP = boese.ip1*.*.*, boese.ip2*.*.*] || [hostname = boeserhost1.com, boeserhost2.com]
  page {
    # redirect to external URL
    headerData.10 = TEXT
    headerData.10.value = <META http-equiv=Refresh Content="0; Url=http://www.goaway.com">
  }
[GLOBAL]

Oder, im .htaccess ein redirect einbauen, das wird bei meinem ISP unterstützt.
Code:

RewriteCond %{REMOTE_ADDR} ^boese.ip1*.*.*|boese.ip2*.*.*
RewriteCond %{HTTP_HOST} !^$
RewriteRule /* http://www.goaway.com/ [R,L]

Bleibe aber bei der TypoScript solution.

Nehme an, dass das nur was fuer kleine Seiten ist. Auf grossen Seiten gibt es dann vielleicht bald hunderte Eintraege die dann Verwaltet werden muessen. Waere das etwas fuer eine TYPO3 Extension? Nehme an, das wird sowieso auf grossen Seiten mit .htaccess oder Apache modulen erledigt??

Gruesse
latschma

latschma ·

Hallo nochmal ...

Gibt es eine Möglichkeit bestimmte Wörter zu indexieren, also dass ein Beitrag im Chc-Forum nicht veröffentlicht wird wenn die im Text sind?

Danke

latschma ·

Hallo

Habe jetzt nochmal das alles durchgelesen, aber die Forum-Spammer sind in der Lage pro Stunde manuell in 400 Foren Einträge zu machen (CAPTCHA sinnlos). Die einzige Möglichket wäre eine Liste mit blockierten Wörtern zu haben. Wer weiss wie, oder wer kann sowas in das CHC-Forum zu inkludieren.

Danke nochmal