Bild wird (korrekt?) generiert, aber kann nicht angezeigt werden?

Ersetzt das Original phpBB CAPTCHA gegen eins mit diversen Konfigurationsmöglichkeiten.

Bild wird (korrekt?) generiert, aber kann nicht angezeigt werden?

Beitragvon Christophe » 19. Mär 2007 21:49

Hallo,

ich habe folgendes Problem: Ich ziehe gerade mit meinem Forum auf einen neuen Server um und habe aus diesem Anlass den AVC-Mod installiert.

Leider werden die Bilder nicht angezeigt. Wenn ich das Bild direkt aufrufe sagt Firefox: "The image cannot be displayed, because it contains errors". Mit anderen Browsern funktioniert es auch nicht.

Prinzipiell geht aber das serverseitige Generieren von Bildern, das habe ich auch getestet. Im error_log steht auch nichts.

Ich hänge mal ein generiertes Bild und einmal phpinfo() an, vielleicht weiß ja jemand von euch wo man jetzt noch Suchen kann. Meine Konfiguration ist

Lighttpd 1.4.3
PHP 5.2.1 (cgi, Dotdeb, Suhosin/ Hardened PHP)
phpBB 2.0.22

Viele Grüße

[center][ Attachment gelöscht am 19.03.2007, 22:15 von AmigaLink ][/center]
Dateianhänge
phpinfo.zip
(7.47 KiB) 733-mal heruntergeladen
Christophe
 
Beiträge: 8
Registriert: 19. Mär 2007 21:28

Beitragvon AmigaLink » 19. Mär 2007 22:11

http://www.amigalink.de/viewtopic.php?t=657 << Besonders Punkt 3 & 4 gilt es zu beachten.
In Bezug auf Punkt 4 gibt es hier auch schon mehrere Themen in denen ich immer wieder darauf Hinweise das eine Fehlerhafte PHP Installation der Grund ist.

Ansonsten weiss ich nicht ob evtl. LightTPD ein Problem darstellen könnte.
Wirklich Vorstellen kann ich mir das zwar nicht, denn es ist ja auch vollkommen Uninteressant ob Apache 1 oder 2 im Einsatz ist. Aber ausschließen kann ich es dennoch nicht, weil ich mit LightTPD keinerlei Erfahrung habe.
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon Christophe » 19. Mär 2007 22:26

Hallo Markus,

ich habe es nochmal getestet, das Testskript funktioniert prima

Code: Alles auswählen
<?php
Header ("Content-type: image/gif");
$im = imagecreate (400, 30);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
ImageTTFText ($im, 20, 0, 10, 20, $white, "arial.ttf",
             "Teste... Omega: ?");
ImageGif ($im);
ImageDestroy ($im);
?>


AVC auch ohne Kreise und mit PNG leider immer noch nicht.

Das merkwürdige ist ja, dass ein Bild generiert wird, aber der Browser es nicht anzeigen kann.

Vielen Dank für deine Mühe
Christophe
 
Beiträge: 8
Registriert: 19. Mär 2007 21:28

Beitragvon AmigaLink » 19. Mär 2007 22:57

Dann liegt es vielleicht wirklich am LightTPD. Bild
Wie kommst du denn drauf daß das Bild Generiert wird? (Das von dir abgehangene Bild war leider Fehlerhaft, deswegen hab ich es gelöscht.)
Hast du eine Anzeige im ACP und bei der Registrierung nicht?
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon Christophe » 19. Mär 2007 23:12

Das Bild was ich angehangen hatte, ist ein von AVC generierter Code. Ich hab die Datei mal mit einer funktionieren PNG-Datei verglichen, zumindest der Anfang ist gleich. Also irgendwas scheint er zu generieren, nur kein 100% korrektes PNG.

Zugefügt nach 18 Minute(n):

Nachtrag: Ich habe gerade usercp_confirm.php so umgebaut, dass es auch alleine läuft. Das tut es auch und zeigt fröhlich springende Buchstaben an (:

Das Problem scheint also doch irgendwie mit dem Code zusammenzuhängen. Nur wie?

Viele Grüße
Christophe
 
Beiträge: 8
Registriert: 19. Mär 2007 21:28

Beitragvon AmigaLink » 20. Mär 2007 13:25

Ok, dann mach mal folgendes:
Code: Alles auswählen
#
#----------[ OPEN ]-------------------------------------
#

includes/page_header.php

#
#----------[ FIND ]-------------------------------------
#

?>

#
#----------[ BEFORE, ADD ]------------------------------
#

echo $userdata['user_id'].' '.$userdata['session_id'];

#
#----------[ SAVE AND CLOSE ALL FILES ]-----------------
#
# EoM
Wenn du das eingefügt hast, bekommst du auf jeder Seite -unterhalb des Headers- zwei Zahlen angezeigt. Die erste Zahl ist die User-ID und die zweite die aktuelle Sessions-ID.
Am bestem du Arbeitest mit 2 Browserfenstern. Ruf die Registrierung auf und schau dir die genannten Zahlen an. Im zweitem Fenster rufst du phpMyAdmin auf und schaust dir die Eintragungen in der Confirm-Tabelle an. Dort muss ein Eintrag mit der session_id vorhanden sein, die dir im Registrierungsformular angezeigt wird!

Nimm den genannten Code möglichst schnell wieder aus dem Netz. Denn die Angezeigten Daten können von Hackern genutzt werden!

Zugefügt nach 2 Minute(n):

Da fällt mir noch was ein. Hast du evtl. die Sessions_id für Gäste unterdrückt?
Wenn ja, dann kann das der Grund sein und die Lösung wäre dies hier:
Code: Alles auswählen
#
#-----[ OPEN ]-----
#

includes/session.php

#
#-----[ FIND ]-----
#

   if ( $userdata['session_user_id'] != ANONYMOUS )
   {
      $SID = 'sid=' . $session_id;
   }
   else
   {
      $SID = '';
   }

#
#-----[ IN-LINE FIND ]-----
#

$userdata['session_user_id'] != ANONYMOUS

#
#-----[ IN-LINE AFTER, ADD ]-----
#

|| isset($HTTP_GET_VARS['agreed'])


#
#-----[ SAVE/CLOSE ALL FILES ]-----
#
# EoM
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon Christophe » 21. Mär 2007 14:31

Hallo Markus,

wenn ich nicht eingeloggt bin, bekomme ich eine Session-ID und auch in der Tabelle phpbb_confirm gibt es einen Eintrag. Trotzdem wie immer kein Bild.

Vielleicht hilft es ja weiter: Hier mal ein diff zwischen der Version, die funktioniert und dem Original:

Code: Alles auswählen
21c21,72
< error_reporting(0);
---
>
> if ( !defined('IN_PHPBB') )
> {
>       die('Hacking attempt');
>       exit;
> }
>
> // Do we have an id? No, then just exit
> if (empty($HTTP_GET_VARS['id']))
> {
>       exit;
> }
>
> $confirm_id = htmlspecialchars($HTTP_GET_VARS['id']);
>
> #if (!preg_match('/^[A-Za-z0-9]+$/', $confirm_id))
> if (!preg_match('/^[[:alnum:]]+$/', $confirm_id))
> {
>       $confirm_id = '';
> }
>
> if ($confirm_id === 'Admin')
> {
>       if ( !$userdata['session_logged_in'] )
>       {
>               die('Hacking attempt');
>               exit;
>       }
>       $code = '';
>       $font_debug = true;
>       $bg_img_debug = true;
> }
> else
> {
>       // Try and grab code for this id and session
>       $sql = 'SELECT code
>               FROM ' . CONFIRM_TABLE . "
>               WHERE session_id = '" . $userdata['session_id'] . "'
>                       AND confirm_id = '$confirm_id'";
>       $result = $db->sql_query($sql);
>
>       // If we have a row then grab data else create a new id
>       if ($row = $db->sql_fetchrow($result))
>       {
>               $db->sql_freeresult($result);
>               $code = $row['code'];
>       }
>       else
>       {
>               exit;
>       }
> }
24a76
> #include($phpbb_root_path.'includes/functions_captcha.'.$phpEx);
30a83,97
> // For better compatibility with some servers which need absolut path
> $phpbb_root_path = str_replace('index.'.$phpEx, '', realpath($phpbb_root_path.'index.'.$phpEx));
>
> // Read the config table
> $sql = "SELECT *
>       FROM " . CAPTCHA_CONFIG_TABLE;
> if( !($result = $db->sql_query($sql)) )
> {
>       message_die(CRITICAL_ERROR, "Could not query captcha config information", "", __LINE__, __FILE__, $sql);
> }
> while ( $row = $db->sql_fetchrow($result) )
> {
>       $captcha_config[$row['config_name']] = $row['config_value'];
> }
> $db->sql_freeresult($result);
33c100
< $code = 'jdkbsj';
---
> $code = ($confirm_id === 'Admin') ? $captcha_config['exsample_code'] : $code;
67,68d133
< $phpbb_root_path = '(...)';
<
Christophe
 
Beiträge: 8
Registriert: 19. Mär 2007 21:28

Beitragvon AmigaLink » 21. Mär 2007 15:25

Ist die angezeigte Sessions_id auch identisch mit dem Eintrag in der Datenbank? Und bleibt die Sessions_id auch gleich wenn du das Formular abschickst?
Ich denke mal das dies nicht der Fall ist.
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Beitragvon Christophe » 21. Mär 2007 16:01

Hi,

ich mich gerade mit dem Code aus der Datenbank angemeldet. Es hat problemlos geklappt. Mit der Session-ID gibt es kein Problem. Es scheint beim Generieren des Bildes zu haken.

Der Code ist leider sehr unübersichtlich, wo kann man da sinnvoll mit dem Debuggen anfangen?

Viele Grüße
Christophe
 
Beiträge: 8
Registriert: 19. Mär 2007 21:28

Beitragvon AmigaLink » 21. Mär 2007 16:52

Der Code ist nicht unübersichtlich. Die Berechnungen sind nur schwer nachzuvollziehen. :)

Da du im ACP ein Bild erhälst und auch dein Test (mit dem eingefügtem code) ein Bild Generiert, kann es nur ein Fehler sein der im direktem Zusammenhang mit der Datenbank steht!
Somit kann dein Problem nur hier sein:
Code: Alles auswählen
   // Try and grab code for this id and session
   $sql = 'SELECT code 
      FROM ' . CONFIRM_TABLE . "
      WHERE session_id = '" . $userdata['session_id'] . "'
         AND confirm_id = '$confirm_id'";
   $result = $db->sql_query($sql);

   // If we have a row then grab data else create a new id
   if ($row = $db->sql_fetchrow($result))
   {
      $db->sql_freeresult($result);
      $code = $row['code'];
   }
   else
   {
      exit;
   }
Entweder erhält diese Abfrage kein Ergebnis (dann bricht das Script ab) oder die Abfrage verursacht eine Fehlermeldung (dadurch wird ein Fehlerhaftes Bild generiert das vom Browser natürlich nicht dargestellt werden kann).
In beiden Fällen ist es kein Fehler des AVC! Denn das ist absicht. :)

In beiden Fällen liegt es entweder an einer fehlenden bzw. falschen session_id oder an einer fehlenden (falsch übergebenen) confirm_id.
Apropos confirm_id. Wenn die confirm_id fehlt, dann wird das Script bereits hier
Code: Alles auswählen
if (empty($HTTP_GET_VARS['id']))
{
   exit;
}
abgebrochen. Was natürlich ebenfalls zu einem fehlendem Image führt.

Such den Fehler also nicht in der usercp_confirm.php sondern in der usercp_register.php und evtl. auch in der profile.php (letzteres ist eher unwahrscheinlich).

Zugefügt nach 6 Minute(n):

Nutzt du evtl. mySQLi ???
Wenn ja, dann stell mal auf mySQL um. Ich kenne mich mit mySQLi nicht aus, aber mir ist bekannt der die mysqli.php (von dem MOD der das phpBB auf mySQLi umstellt) noch nicht 100%ig ok ist.
Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
Benutzeravatar
AmigaLink
Administrator
 
Beiträge: 3987
Registriert: 11. Aug 2004 01:06
Wohnort: NRW

Nächste

Zurück zu Advanced Visual Confirmation



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste

cron