Alter Antispam bei Version 1.1P verwenden

Eingetragen von Mairu am Mi, 01. Mai 2013 - 18:03


Da einige mit dem neuen Antispam nicht zufrieden sind, gibt es hier eine Anleitung den alten Antispam (von den Versionen vor 1.1P) wieder zu verwenden.

Für den Antispam sind 2 Funktionen notwendig, das sind chk_antispam() und get_antispam(), beide befinden sich in der Datei includes/include/func/allg.php.

Um den alten Antispam wieder zu verwenden, muss man nur die beiden Funktionen mit den folgenden ersetzen (Alle anderen nötigen Dateien des alten Antispams sind bei bei Version 1.1P noch mit dabei).

/**
 * Prüft, ob der Antispamcode richtig eingegeben wurde
 * Der NoPictureMode fügt ein Hidden Feld ein, um Cross Site Request Forgery Attacken zu unterbinden, der NoPictureMode
 * wird automatisch genutzt, wenn kein Bildabfrage statt findet, kann aber auch erzwungen werden
 *
 * @global array $allgAr
 * @param string $m Modulname, um unterschiedliche Antispamfelder auf einer Seite zu ermöglichen
 * @param boolean $nopictures NoPictureMode erzwingen
 * @return boolean
 */
function chk_antispam($m, $nopictures = false)
{
    global $allgAr;

    if (!$nopictures && is_numeric($allgAr['antispam']) && has_right($allgAr['antispam'])) {
        $nopictures = true;
    }

    $valid = false;

    if ($nopictures && isset($_POST['antispam_id'])) {
        $antispamId = $_POST['antispam_id'];
        if (isset($_SESSION['antispam'][$antispamId]) && $_SESSION['antispam'][$antispamId]) {
            $valid = true;
            unset($_SESSION['antispam'][$antispamId]);
        }
    } elseif (isset($_POST['antispam'])
        && isset($_POST['antispam_id'])
        && isset($_SESSION['antispam'][$_POST['antispam_id']])
        && $_POST['antispam'] === $_SESSION['antispam'][$_POST['antispam_id']][$m][3]
    ) {
        unset ($_SESSION['antispam'][$_POST['antispam_id']]);
        $valid = true;
    }
    return $valid;
}

/**
 * Erzeugt HTML Code für ein Formularfeld, welches für einen Antibot-Schutz dienen oder vor CSFR Attacken schützen soll
 * Beschreibung zum NoPictureMode bitte der chk_antispam Funktion entnehmen
 *
 * @global array $allgAr
 * @param string $m Modulname
 * @param integer $t Type, der angibt wie das Formularfeld formatiert wird (0, 1 oder > 10 als Breite für das label) siehe Code :P
 * @param boolean $nopictures Erzwing NoPictureMode
 * @return string
 */
function get_antispam($m, $t, $nopictures = false)
{
    global $allgAr;

    if (!$nopictures && $t < 0 || (is_numeric($allgAr['antispam']) && has_right($allgAr['antispam']))) {
        $nopictures = true;
    }

    mt_srand((double)microtime()*1000000);
    $id = uniqid($m, true);

    $rs = '<input type="hidden" name="antispam_id" value="'.$id.'" />';

    if ($nopictures) {
        $_SESSION['antispam'][$id] = true;
        return $rs;
    }

    if (is_numeric($allgAr['antispam']) && has_right($allgAr['antispam'])) {
        return '';
    }

    if (!isset($_SESSION['antispam']) || (isset($_SESSION['antispam']) && !is_array($_SESSION['antispam']))) {
        $_SESSION['antispam'] = array();
    }

    $_SESSION['antispam'][$m] = array();
    $i1 = mt_rand (1,9);
    $i2 = mt_rand (1,9);
    $i3 = mt_rand (1,9);

    $_SESSION['antispam'][$id][$m] = array($i1, $i2, $i3, $i1.$i2.$i3);

    $rs .= '<span style="display: inline; width: 100px; vertical-align: middle; text-align: center; background-color: #000000; border: 0px; padding: 2px; margin: 0px;">'
        . '<img src="include/images/spam/z.php?m='.$m.'&w=0&'.session_name().'='.session_id().'&id='.$id.'" alt="">'
        . '<img src="include/images/spam/z.php?m='.$m.'&w=1&'.session_name().'='.session_id().'&id='.$id.'" alt="">'
        . '<img src="include/images/spam/z.php?m='.$m.'&w=2&'.session_name().'='.session_id().'&id='.$id.'" alt="">'
        . '<input name="antispam" size="3" maxlength="3" style="background-color: #FFFFFF; border: 0px; margin: 0px; padding: 0px;" /></span>';
    if ($t == 0) {
        return ($rs);
    } elseif ($t == 1) {
        return '<tr><td class="Cmite">Antispam</td><td class="Cnorm">'.$rs.'</td></tr>';
    } elseif ($t > 10) {
        return '<label style="float:left; width: '.$t.'px; ">Antispam</label>'.$rs.'<br />';
    } else {
        return '';
    }
}