Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Captcha base64-encoded, wo ?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Captcha base64-encoded, wo ?
    am: 26. März 2020, 20:49:11
    Hallo Community.
    Vorab: ich hoffe Ihr seid alle gesund, und wenn nicht, möge es euch bald besser gehen.

    Zum Thema:
    Wenn man unter Backend => System Module das Modul "PhpCaptcha" aktiviert wird das Captcha base64-encoded ausgegeben. Ich finde beim besten Willen die Code-Stelle nicht wo die Codierung geschieht. Wer kann mir einen Tipp geben ?

    Hintergrund:
    Ich benutze gerne einen Reload-Button hinter dem Captcha, um, wenn der Kunde das Captcha nicht lesen kann oder unsicher ist, ein neues laden kann, ohne Seiten-Reload.
    In älteren Versionen konnte man das z.B. so machen:
    Im File /templates/YOUR_TEMPLATE/module/contact_us.html
    Code: XML  [Auswählen]
    <td>{$VVIMG} <span id="rel-capt">RELOAD_ICON</span></td>

    oder als FontAwesome-Font-Icon so
    Code: XML  [Auswählen]
    <td>{$VVIMG} <i id="rel-capt" class="fa fa-undo"></i></td>

    Ob das RELOAD_ICON dann eine Grafik oder ein Font-Icon (z.B. FontAwesome) war, ist in dem Kontext hier nicht wichtig.

    Mittels Javascript wurde dem Captcha dann bei Klick auf das Reload-Icon als URL-Parameter ein Zeitstempel hinten angehängt:
    z.B. in der Datei selbst mittels
    Code: XML  [Auswählen]
    {literal}
    <script>
    /* <![CDATA[ */
    $(function(){
       $('#rel-capt').click(function(){
            var d = new Date();    
           $(this).prev('img').attr('src', {/literal}'{$smarty.const.DIR_WS_CATALOG}display_vvcodes.php?' + d.getTime());{literal}  
       });

    });
    /* ]]> */
    </script>
    {/literal}

    Mit dem base64-encoded Captcha funktioniert das
    Code: XML  [Auswählen]
    {$smarty.const.DIR_WS_CATALOG}display_vvcodes.php?' + d.getTime()

    nicht mehr.

    Wer hat eine Idee, bzw. wo wird das base64-Encoding gemacht ?
    Ich danke im Voraus für Hinweise.

    Gruß,
    noRiddle

    Linkback: https://www.modified-shop.org/forum/index.php?topic=40940.0

    Timm

    • Fördermitglied
    • Beiträge: 6.318
    Re: Captcha base64-encoded, wo ?
    Antwort #1 am: 26. März 2020, 23:12:32
    Abend noRiddle

    Redest du vom Demoshop? In meinem Testshop 2.0.5.0 kann ich nämlich bei erweiterte Konfiguration-Captcha nur Standard auswählen und nicht php Captcha.

    Soweit ich weiß gibt es das nur zu kaufen beim Team. Sind die Dateien vielleicht deshalb nicht zu finden?

    Gruß Timm

    Edit:
    Mit dem base64-encoded Captcha funktioniert das
    Code: XML  [Auswählen]
    {$smarty.const.DIR_WS_CATALOG}display_vvcodes.php?' + d.getTime()

    nicht mehr.

    Wobei mich das vermuten lässt, dass du das Modul doch schon hast. Sonst könntest du ja nicht sagen, dass es damit nicht mehr funktioniert. Dann wird da aber nur das Team helfen können, wenn kein anderer oder nur wenige das Modul bereits haben.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #2 am: 26. März 2020, 23:16:25
    Liebes FräuleinGarn, ich zitiere ungerne abgegriffene Sprüche, aber in diesem Fall:
    Wer lesen kann ist klar im Vorteil. :-D

    ...
    Wenn man unter Backend => System Module das Modul "PhpCaptcha" aktiviert wird das Captcha base64-encoded ausgegeben....
    ...

    Und nach Installation des genannten System-Modules kannst du unter Erw. Konfiguration => Captcha auch mehr als "Standard" auswählen, bzw. ist es bei Aktivierung des Modules bereist vorgewählt.

    Gruß,
    noRiddle

    Timm

    • Fördermitglied
    • Beiträge: 6.318
    Re: Captcha base64-encoded, wo ?
    Antwort #3 am: 26. März 2020, 23:22:50
    Ich habe meinen Beitrag ja schon bevor ich deine Antwort gelesen habe korrigiert. Insofern ist mir schon aufgefallen, dass du das Modul bereits nutzen können musst.

    Sorry ich hab das irgendwie verwechselt. Das Team wollte doch irgendein Captcha entgeltlich vertreiben ab der neuen Version und ich hab das mit phpcaptcha verwechselt. Recaptcha vielleicht?  :-?

    Gruß Timm

    EDIT: Jetzt wo ich weiß, das phpcaptcha mit dabei ist, muss ich mich ja auch noch damit ausseinandersetzen was besser ist? Standard oder Php captcha  :wohow:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #4 am: 26. März 2020, 23:38:43
    Jau, ich glaube das modified-Modul
    - wenn es nicht sogar mehrere gibt, man kann sich in der 2.0.5.0 beliebig eigene Captcha-Module update-sicher bauen -
    ist das Google ReCaptcha.

    Ich hoffe meine eigtl. Frage geht jetzt nicht unter, du Spammer...  :flee-mrgreen:

    Gruß,
    noRiddle

    Timm

    • Fördermitglied
    • Beiträge: 6.318
    Re: Captcha base64-encoded, wo ?
    Antwort #5 am: 27. März 2020, 00:00:35
    Hier was dabei?

    inc/xtc_render_vvcode.inc.php
    inc/xtc_rand.inc.php
    incudes/external/captcha/php-captcha.inc.php

    Gruß Timm

    Timm

    • Fördermitglied
    • Beiträge: 6.318
    Re: Captcha base64-encoded, wo ?
    Antwort #6 am: 27. März 2020, 00:20:58
    Wo testest du das denn? In einem 2.0.5.0 Shop vermutlich. Aber sind da schon die Änderungen aus Ticket #930 drin für die compactor.php? Bzw. testweise alternativ die Komprimierungen ausgeschaltet?

    Denn ich hatte auch in meinem Testshop Probleme in der original 2.0.5.0 weil ein base64 image für das reload image in einem externen Skript mehrere Backslashes enthalten hatte und mit der alten compactor.php  dadurch alles an code dahinter im Skript gelöscht wurde und es somit zu Anzeigefehlern kam.

    Gruß Timm

    EDIT:
    neu ist auch includes/classes/modified_captcha.php

    vr

    • modified Team
    • Beiträge: 2.664
    Re: Captcha base64-encoded, wo ?
    Antwort #7 am: 27. März 2020, 01:33:58
    Schaut mal in

    https://www.modified-shop.org/forum/index.php?topic=40869.msg372121#msg372121

    Kommt ihr an das changeset ran?

    Grüße Volker

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.213
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #8 am: 27. März 2020, 08:25:25
    Das Captcha wird erst in der kommenden Version als base64 ausgegeben.

    Gruss Gerhard

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #9 am: 27. März 2020, 08:48:37
    Nun, ich habe die changesets die ich mitbekommen habe bereits geladen (hier also namely 12661).
    Ich habe nicht nur nicht daran gedacht sondern dort auch nicht geschaut, ich Idi...
    Jetzt habe ich die Stelle natürlich gefunden wo das base64_encode() stattfindet.
    Leider wird das mit dem Reload des Captchas dann etwas komplexer und geht nur noch per Ajax-Request und einer PHP-Response, nicht mehr lediglich  mit simplem Javascript.

    Danke.

    Gruß,
    noRiddle

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.213
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #10 am: 27. März 2020, 10:08:44
    im bisherigen System gab es leider Konstellationen bei dem das Captcha nie gültig war.
    Deshalb der Umbau auf base64.

    Gruss Gerhard

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #11 am: 27. März 2020, 17:32:09
    Just for the record:

    Wer so einen Reload-Button hinter das Captcha einbauen möchte, hier eine Anleitung:
    Dabei ist zu beachten
    - was allerdings immer gilt für die Shop-Version 2.0.5.0, also auch ohne den Reload-Button -
    daß der Cache ausgeschaltet ist Backend => Erw. Konfiguration => Cache Optionen => "Cache benutzen". "DB Cache" kann angeschaltet sein.
    Das liegt an einem Fehler im Cache-System welches Seiten die Fehlermeldungen ausgeben können undifferenziert cacht und dann immer die gecachte Seite ausgibt, was zu irrsinnigen oder zu fehlenden Fehlermeldungen führen kann.



    Anleitung:
    (am Beispiel Kontaktformular für tpl_modified_responsive und aktiviertem System-Modul "PhpCaptcha".)

    Voraussetzung:
    • Shop-Version 2.0.5.0
    • Implementierung des Changesets r12611 aus Ticket #1752.
      Das changeset kann ruhig in den Shop geladen werden, da es so oder in ähnlicher Funktion in der kommenden 2.0.5.1 ohnehin kommen wird.

    1. In /templates/YOUR_TEMPLATE/module/contact_us.html das suchen
    Code: XML  [Auswählen]
    <td><span class="fieldtext">{#text_sec_code#}</span><span class="stern">{$VVIMG}</span></td>

    und hiermit ersetzen
    Code: XML  [Auswählen]
    <td><span class="fieldtext">{#text_sec_code#}</span><span class="stern">{$VVIMG}</span> <i id="rel-capt" class="fa fa-undo" title="reload"></i></td> {*added reload icon by noRiddle, EUER_KÜRZEL*}

    2. In /templates/YOUR_TEMPLATE/stylesheet.css ganz unten
    das einfügen
    Code: CSS  [Auswählen]
    /*BOC reload icon for Captcha by noRiddle, EUER_KÜRZEL*/
    .stern img {vertical-align: middle;}
    #rel-capt {
        font-size: 50px;
        display: inline-block;
        padding: 0 0 0 10px;
        vertical-align: middle;
        cursor:pointer;
    }
    /*EOC reload icon for Captcha by noRiddle, EUER_KÜRZEL*/

    Die font-size sollte zur im o.g. System-Modul konfigurierten Höhe des Captcha passen, einfach ein wenig experimentieren.

    3. Legt eine Datei an namens captcha.js.php in /templates/YOUR_TEMPLATE/javascript/extra/ mit folgendem inhalt
    Code: PHP  [Auswählen]
    <?php
    /**********************************************************************************************************
    * file: captcha.js.php
    * path: /templates/YOUR_TEMPLATE/javascript/extra/
    * use: define function for reload button for captcha
    *      adaptation for reload icon in e.g. /templates/YOUR_TEMPLATE/module/contact_us.html needed
    *
    * (c) 03-2020, noRiddle
    ***********************************************************************************************************/


    $post_ajax_captcha_url = xtc_href_link('captcha_reload.php');
    ?>
    <script>
    $(function(){
        var $rel_capt = $('#rel-capt');
        $rel_capt.click(function(){
            var d = new Date();
            $.post("<?php echo $post_ajax_captcha_url; ?>",
                {captcha_reloaded: 'cr_true'},
                function(data){
                    $rel_capt.prev('span').find('img').attr('src', data);
                }
            );
        });
    });
    </script>

    4. Legt eine Datei im Root-Verzeichnis des Shops an namens captcha_reload.php mit folgendem Inhalt
    Code: PHP  [Auswählen]
    <?php
    /*******************************************************
    * file: captcha_reload.php
    * path: /
    * use: php response on ajax request to reload captcha
    *
    * (c) 03-2020, noRiddle
    *******************************************************/


    if(isset($_POST['captcha_reloaded']) && $_POST['captcha_reloaded'] == 'cr_true') {
        include('includes/application_top.php');

        require_once(DIR_WS_CLASSES.'modified_captcha.php');
        $mod_capt_inst = $_mod_captcha_class::getInstance();

        echo 'data:image/jpeg;base64,'.base64_encode($mod_capt_inst->output());
        exit();
    } else {
        echo 'No access to this area.';
    }
    ?>

    Außerdem ist es empfehlenswert dem Kunden mitzuteilen, daß bei der Eingabe der Zeichen des Captchas Groß- und Kleinschreibung egal sind, das wird nämlich code-technisch abgefangen und ist für den User/Kunden viel einfacher.
    Dafür könnte man folgendes machen:

    In /templates/YOUR_TEMPLATE/lang/lang_german.custom unten das einfügen
    #BOC overwrite vars, EUER_KÜRZEL
    text_inp_code = 'Sicherheitscode<br />(Groß- und Kleinschreibung egal)'
    #EOC overwrite vars, EUER_KÜRZEL

    In /templates/YOUR_TEMPLATE/lang/lang_english.custom unten das einfügen
    #BOC overwrite vars, EUER_KÜRZEL
    text_inp_code = 'Security code<br />(Don\'t mind upper and lower case.)'
    #EOC overwrite vars, EUER_KÜRZEL

    Viel Erfolg.

    Gruß,
    noRiddle

    *NACHTRAG*
    Hier noch ein Screenshot.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: Captcha base64-encoded, wo ?
    Antwort #12 am: 04. September 2020, 15:52:25
    Mir fällt gerade auf, daß diese Code-Zeile
    Code: Javascript  [Auswählen]
    var d = new Date();
    im Javascript-Code unnötig ist, das kann raus.
    Das ist noch ein Relikt aus der ursprünglichen Implementation für ältere Shop-Systeme in Post 1.

    Gruß,
    noRiddle
    1 Antworten
    2013 Aufrufe
    22. Januar 2015, 08:16:51 von jannemann
    2 Antworten
    1711 Aufrufe
    04. November 2013, 20:44:20 von Planzo
    4 Antworten
    1886 Aufrufe
    21. April 2016, 15:13:47 von hpzeller
               
    anything