Session cookie is configurable. Added apache2 config example.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 12 Feb 2013 21:33:06 +0000 (22:33 +0100)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 12 Feb 2013 21:33:06 +0000 (22:33 +0100)
CookieCaptcha.class.php
CookieCaptcha.php

index a85973608223f3438f4c2326d53feae9ad6459a3..b96ac4c674db1774ca47df8333bf1fcbce89471d 100644 (file)
@@ -10,7 +10,8 @@ class CookieCaptcha extends SimpleCaptcha {
         * @return bool
         */
        function keyMatch( $answer, $info ) {
         * @return bool
         */
        function keyMatch( $answer, $info ) {
-               if (isset($_COOKIE['cookiecaptcha'])) {
+               global $wgCaptchaCookieName;
+               if (isset($_COOKIE[$wgCaptchaCookieName])) {
                        wfDebug( "CookieCaptcha: Found cookie\n" );
                        return true;
                } else {
                        wfDebug( "CookieCaptcha: Found cookie\n" );
                        return true;
                } else {
@@ -43,11 +44,12 @@ class CookieCaptcha extends SimpleCaptcha {
         * Insert the captcha prompt into the edit form.
         */
        function getForm() {
         * Insert the captcha prompt into the edit form.
         */
        function getForm() {
-               global $wgLogo;
+               global $wgCaptchaCookieName, $wgCaptchaCookieImage, $wgCaptchaCookieAlt, $wgCaptchaCookieStyle;
                return "<p>" .
                        Html::element( 'img', array(
                return "<p>" .
                        Html::element( 'img', array(
-                               'src'    => $wgLogo,
-                               'alt'    => '' ) ) .
+                               'src'    => $wgCaptchaCookieImage,
+                               'alt'    => $wgCaptchaCookieAlt,
+                               'style'  => $wgCaptchaCookieStyle ) ) .
                        "</p>\n";
        }
 
                        "</p>\n";
        }
 
index 30a03170930917b2cd0e96c8614523f39c661493..82b265c275ac44f83d5446875b5fc947e6647aea 100644 (file)
  * @ingroup Extensions
  */
 
  * @ingroup Extensions
  */
 
+/* The idea of this "captcha" is to let the browser download an image that sets a cookie.
+Research showed that spam bots don't load images. You have to setup the cookie e.g. in the apache2
+configuration file. Here is an example where an image that's uploaded with mediawiki is used:
+
+<Directory /var/www/mediawiki/images/d/d0>
+    <Files "MyImage.png">
+        Header append Set-Cookie "mediawiki_token=%t; Path=/; HttpOnly"
+        ExpiresActive On
+        ExpiresDefault "access plus 5 second"
+    </Files>
+</Directory>
+*/
+
+
 if ( !defined( 'MEDIAWIKI' ) ) {
        exit;
 }
 
 $dir = __DIR__;
 require_once $dir . '/ConfirmEdit.php';
 if ( !defined( 'MEDIAWIKI' ) ) {
        exit;
 }
 
 $dir = __DIR__;
 require_once $dir . '/ConfirmEdit.php';
+
 $wgCaptchaClass = 'CookieCaptcha';
 $wgCaptchaClass = 'CookieCaptcha';
+$wgCaptchaCookieName = 'mediawiki_token';                     // make it look "realistic". Idea: use $wgCookiePrefix . '_token'
+$wgCaptchaCookieImage = '/mediawiki/images/d/d0/MyImage.png'; // You _have_ to specify an existing image
+$wgCaptchaCookieAlt = '';                                     // alt attribute for the image
+$wgCaptchaCookieStyle = 'display:none;';                      // CSS inline style applied to the image
+
 
 $wgExtensionMessagesFiles['CookieCaptcha'] = $dir . '/CookieCaptcha.i18n.php';
 $wgAutoloadClasses['CookieCaptcha'] = $dir . '/CookieCaptcha.class.php';
 
 $wgExtensionMessagesFiles['CookieCaptcha'] = $dir . '/CookieCaptcha.i18n.php';
 $wgAutoloadClasses['CookieCaptcha'] = $dir . '/CookieCaptcha.class.php';