Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

[SMARTY] Im Quelltext steht was anderes als auf dem Bildschirm

Diskussion: [SMARTY] Im Quelltext steht was anderes als auf dem Bildschirm im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo Leute, ich habe heute ein sehr merkwürdiges Problem: {$smarty.session.captcha_spam} gibt laut Ausgabe folgendes aus: L9acc Im Quelltext steht ...

Antwort
Alt 19.02.11, 14:37   #1 (permalink)
 
Registriert seit: 20.12.09
sulpsulpc Leistung: Addierstift
sulpsulpc eine Nachricht über Skype™ schicken
Likes: 0
Standard [SMARTY] Im Quelltext steht was anderes als auf dem Bildschirm

Anzeige

Hallo Leute,
ich habe heute ein sehr merkwürdiges Problem:
{$smarty.session.captcha_spam} gibt laut Ausgabe folgendes aus:
L9acc
Im Quelltext steht jedoch:
vL7Ab

Ist dieser Fehler in Smarty normal?

__________________
Browser: Firefox 4.01
PHP-Version: 5.3
Framework: 2.0.50727, 3.0, 3.5
OS: Windows 7 Home Premium 64-Bit, Ubuntu 11.04
sulpsulpc ist offline   Mit Zitat antworten
Alt 19.02.11, 14:42   #2 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

der PHP-Code wäre noch ganz interessant... denn da wird der wahre Fehler drin stecken... mit den mageren Informationen, die du hier postest, wird dir sicherlich keiner helfen können...
beavisbee ist gerade online   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 19.02.11, 14:44   #3 (permalink)
Administrator
 
Benutzerbild von Mackz
 
Registriert seit: 02.10.01
Mackz Leistung: Pentium IMackz Leistung: Pentium I
Likes: 30
Standard

Ohne die genauen Zusammenhänge zu kennen wird dir höchst wahrscheinlich niemand diese Frage beantworten können.

Da die Variable eine Sessionvariable zu sein scheint, rate ich einfach mal ins Blaue und tippe das du evtl. eine zweite Session startest, dadurch eine neue SID erhälst und deshalb deine Variable unterschiedliche Inhalte liefert...
__________________
RL sux big time... auch 2012!

Deleting pr0n is like killing your best friend

[HaBo] bei Facebook - Werde Fan
Mackz ist offline   Mit Zitat antworten
Alt 19.02.11, 14:57   #4 (permalink)
Themenstarter
 
Registriert seit: 20.12.09
sulpsulpc Leistung: Addierstift
sulpsulpc eine Nachricht über Skype™ schicken
Likes: 0
Standard

Hallo,

Entschuldigung, dass ich vergessen habe, den PHP Quellcode zu posten. Hier ist die Template:
HTML-Code:
Hier können Sie Kontakt zum Serveradministrator aufnehmen.
<form action="kontakt.php" method="post">
<table>
	<tr>
		{if $smarty.session.name != ""}
			<th>Von:</th><td><input type="text" name="from" value="{$smarty.session.name}" disabled="disabled" /></td>
		{else}
			<th>Von:</th><td><input type="text" name="from" /></th>
		{/if}
	</tr>
	<tr>
		<th>Betreff:</th><td><input type="text" name="subject" /></td>
	</tr>
	<tr>
		<th>Nachricht:</th><td><textarea name="message" cols="30" rows="10"></textarea></td>
	</tr>
	<tr>
		<td><img src="./captcha/captcha.php" alt="Captcha" /></td><td><input type="text" name="captcha" /></td>
	</tr>
	<tr>
		<td><input type="submit" value="Absenden" id="ksubmit" /></td><td><input type="reset" value="Eingabe l&ouml;schen" /></td>
	</tr>
</table>
</form>
{$smarty.session.captcha_spam}
Und dann noch die captcha.php:
PHP-Code:
<?php
session_start
();
unset(
$_SESSION['captcha_spam']);

function 
randomString($len) {
  function 
make_seed(){
     list(
$usec $sec) = explode (' 'microtime());
     return (float) 
$sec + ((float) $usec 100000);
  }
  
srand(make_seed());  
                   
  
//Der String $possible enthält alle Zeichen, die verwendet werden sollen
  
$possible="ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
  
$str="";
  while(
strlen($str)<$len) {
    
$str.=substr($possible,(rand()%(strlen($possible))),1);
  }
return(
$str);
}

$text randomString(5);  //Die Zahl bestimmt die Anzahl stellen
$_SESSION['captcha_spam'] = $text;
     
header('Content-type: image/png');
$img ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
$color ImageColorAllocate($img000); //Farbe
$ttf "./XFILES.TTF"//Schriftart
$ttfsize 25//Schriftgrösse
$angle rand(0,5);
$t_x rand(5,30);
$t_y 35;
imagettftext($img$ttfsize$angle$t_x$t_y$color$ttf$text);
imagepng($img);
imagedestroy($img);
?>
Und die index.php (gekürzt):
PHP-Code:
<?php
session_start
();
require_once(
"./lib/define.php");

mysql_connect(DBHOST,DBUSER,DBPASS) or die("Error ".mysql_errno().": ".mysql_error());
mysql_select_db(DBNAME) or die("Error ".mysql_errno().": ".mysql_error());

if (isset(
$_SESSION["name"]) && isset($_SESSION["id"]))
    
$loggedin true;
else
    
$loggedin false;

require_once(
SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;

if (
$_GET["s"] == FALSE || $_GET["s"] == ""$site "Home";
else 
$site $_GET["s"];

if (
$_GET["e"] != FALSE || $_GET["e"] != "") {
    
$equery mysql_query("SELECT * FROM `errors` WHERE `id` = '".$_GET["e"]."' LIMIT 1") or die("Error ".mysql_errno().": ".mysql_error());
    
$error mysql_fetch_assoc($equery);
}
/*viele Datenbankabfragen (gestrichen) */
/*sehr viele Zuweisungen (gestrichen) */
$smarty->display("index.tpl");
?>
Das auskommentieren von session_start in der captcha.php bringt auch nix, dann ändert sich der Wert überhaupt nicht mehr.
__________________
Browser: Firefox 4.01
PHP-Version: 5.3
Framework: 2.0.50727, 3.0, 3.5
OS: Windows 7 Home Premium 64-Bit, Ubuntu 11.04
sulpsulpc ist offline   Mit Zitat antworten
Alt 19.02.11, 14:59   #5 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Wenn du im Firefox "Quelltext anzeigen" auswählst, wird die Seite normalerweise neu abgerufen (Wie das andere Browser machen weiß ich nicht). Wenn dein Captcha pro Aufruf neu erzeugt wird, kriegst du eben einen anderen Wert angezeigt.

edit: Durch das "unset($_SESSION['captcha_spam']);" wird tatsächlich bei jedem Aufruf (der captcha.php) ein neues Captcha erzeugt.
Du zeigst zuerst die Seite im Browser an. Deine Session hat noch den alten Captcha-Wert, der sich erst ändert, wenn das Captcha-Bild vom Browser geladen wird. Wenn du dir jetzt den Quelltext anzeigst, siehst du schon den neuen Captcha-Wert ( der zu dem zuletzt geladenen Bild passt)

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter

Geändert von metax. (19.02.11 um 15:05 Uhr)
metax. ist offline   Mit Zitat antworten
Alt 19.02.11, 15:36   #6 (permalink)
Themenstarter
 
Registriert seit: 20.12.09
sulpsulpc Leistung: Addierstift
sulpsulpc eine Nachricht über Skype™ schicken
Likes: 0
Standard

Hallo,

ich brauche aber den neuen Wert für das Kontaktformular. Wie bekomme ich den her? Soll ich über JS prüfen, ob das Bild geladen ist, und dann erst die Variable ausgeben?

MfG
Markus
__________________
Browser: Firefox 4.01
PHP-Version: 5.3
Framework: 2.0.50727, 3.0, 3.5
OS: Windows 7 Home Premium 64-Bit, Ubuntu 11.04
sulpsulpc ist offline   Mit Zitat antworten
Alt 19.02.11, 15:45   #7 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Hallo,

normalerweise funktionieren Captcha-Systeme doch so, dass du erst das Bild angezeigt bekommst, dann den Wert eingibst und dann erst serverseitig den Wert vergleichst (um gegen Spam zu prüfen).
Dafür wäre die Reihenfolge doch korrekt. Durch Neuladen der Seite könnte man das Captcha erneuern (falls man es nicht lesen kann).
Wenn du den korrekten Captcha-Code vor dem Bild brauchst, dann musst du eben den Wert von $_SESSION['captcha_spam'] an anderer Stelle setzen und erneuern.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 19.02.11, 15:48   #8 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

wieso willst du den Captcha-Code auf der Seite irgendwo ausgeben? Da nimmst du dem Captcha doch den Sinn, wenn der Crawler / Bot das Captcha auf dem Silbertablett bekommt.

Bild wird geladen --> Captcha-Code wird in Session-Variable gespeichert --> Formular wird abgesendet --> es wird überprüft, ob der Session-Wert gleich dem eingegebenen Wert. Fertig. Wozu willst du den Code als Text irgendwo auf der Seite ausgeben? Da hat er einfach nix verloren...
beavisbee ist gerade online   Mit Zitat antworten
Alt 19.02.11, 15:51   #9 (permalink)
Themenstarter
 
Registriert seit: 20.12.09
sulpsulpc Leistung: Addierstift
sulpsulpc eine Nachricht über Skype™ schicken
Likes: 0
Standard

Hallo,

das ist nur dumm, wenn man zuerst die Vollständigkeit der Eingaben via jQuery prüft, und dann erst dann die E-Mail abschickt. Das Prüfen sollte dabei aber im Hintergrund ablaufen, also brauche ich zur selben Zeit denselben Wert. Wo muss ich dann die Session Variable setzen? Rein von der Logik her müsste doch die Reihenfolge stimmen.

Edit: Der Captcha wird ja nur zu testzwecken ausgegeben, ich lösche den dann natürlich wieder raus

MfG
Markus
__________________
Browser: Firefox 4.01
PHP-Version: 5.3
Framework: 2.0.50727, 3.0, 3.5
OS: Windows 7 Home Premium 64-Bit, Ubuntu 11.04
sulpsulpc ist offline   Mit Zitat antworten
Alt 19.02.11, 16:01   #10 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

mach den Captcha-Check doch über AJAX - eine testCaptcha.php, welche einfach als GET oder POST den Inhalt des Input-Feldes bekommt und diesen dann mit der Session vergleicht... hier solltest du jedoch eine Begrenzung einbauen, dass dieses Script nicht zum Captcha-Bruteforcen missbraucht werden kann... (z.B. AJAX-Request nur beim onBlur-Event ausführen, prüfen, noch eine SessionVar "lastCaptcha" und "captchaTryNum" oder so speichern, um sicherzustellen, dass jeder AJAX-Test nur einmal pro Captcha ausgeführt werden kann und wenn der Test nicht erfolgreich war, dann gleich das Captcha-Bild neuladen)

alles andere ist unsinnig, da die Seite, die das Formular enthält zwingend vor der Seite geladen wird, welche das Captcha generiert und als Bild ausgibt. Und den Captcha-Code in dem Formular-Script zu generieren und in dem zweiten Script, welches das Bild ausgibt, nur anzuzeigen, das halte ich für ne ziemlich dreckige Lösung... und selbst, wenn du den Code nicht für den Nutzer ausgeben willst, sondern im JavaScript weiterverarbeiten willst, so ist der Code doch trotzdem für den Client sichtbar (in dem Moment, wo er den Quelltext z.B. mit FireBug oder im Cache anschaut) und somit verliert das Captcha seinen Sinn.

Der Captcha-Code darf NIEMALS in Textform ausgeliefert werden - egal ob als direkte Ausgabe oder "nur" im JavaScript...
beavisbee ist gerade online   Mit Zitat antworten
Alt 19.02.11, 22:48   #11 (permalink)
Themenstarter
 
Registriert seit: 20.12.09
sulpsulpc Leistung: Addierstift
sulpsulpc eine Nachricht über Skype™ schicken
Likes: 0
Standard

Aber wie komme ich an den wirklichen Captcha heran? Die Session ist ja in der Vergangenheit, somit würde es nicht stimmen, zumal der JS Code in einer externen Datei ist. Und mit JS kann man meines Wissens auch nicht den Captcha vom Bild auslesen, also wie soll ich das jetzt machen? (Hinweis: ich benutze jQuery).
__________________
Browser: Firefox 4.01
PHP-Version: 5.3
Framework: 2.0.50727, 3.0, 3.5
OS: Windows 7 Home Premium 64-Bit, Ubuntu 11.04
sulpsulpc ist offline   Mit Zitat antworten
Alt 20.02.11, 00:40   #12 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Habe ich alles im letzten Beitrag erklärt...

Der Code steht in der Session, NACHDEM das Captcha-Bild geladen wurde.
WENN du das Captcha per JS prüfen willst, dann nicht mit einem JS, welches die Eingabe mit einem vorgegebenen Code abgleicht, sondern mit einem AJAX-Request, welcher den eingegebenen Code direkt mit der Session abgleicht...

Und wenn du den Sinn daran nicht erkennst, kann ich dir nur raten: lass das mit dem JS bleiben und prüfe nur php-seitig nach Absenden des Formulars.
beavisbee ist gerade online   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » [SMARTY] Im Quelltext steht was anderes als auf dem Bildschirm
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



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