| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
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 ...
![]() |
| | #1 (permalink) |
| 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 | |
| | |
| | #2 (permalink) |
| Member of Honour ![]() | 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... |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Administrator ![]() Registriert seit: 02.10.01 ![]() ![]() Likes: 30 | 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 |
| | |
| | #4 (permalink) |
| Themenstarter | 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öschen" /></td> </tr> </table> </form> {$smarty.session.captcha_spam} PHP-Code: PHP-Code:
__________________ 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 |
| | |
| | #5 (permalink) |
| 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) | |
| | |
| | #6 (permalink) |
| Themenstarter | 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 |
| | |
| | #7 (permalink) |
| 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 | |
| | |
| | #8 (permalink) |
| Member of Honour ![]() | 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... |
| | |
| | #9 (permalink) |
| Themenstarter | 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 |
| | |
| | #10 (permalink) |
| Member of Honour ![]() | 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... |
| | |
| | #11 (permalink) |
| Themenstarter | 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 |
| | |
| | #12 (permalink) |
| Member of Honour ![]() | 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. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |