Ergebnis 1 bis 13 von 13

Thema: Eigene Sicherheitsabfrage mitsamt Backend-Feld

  1. #1
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard Eigene Sicherheitsabfrage mitsamt Backend-Feld

    Moin moin,

    ein Kunde äußerte den Wunsch, die jetzige mathematische Sicherheitsfrage durch ein Eingabefeld zu ersetzen, wo die Menschen, die sich registrieren möchten, zunächst einen (ihnen vorher bekanntgegebenen) Code (Passwort) eingeben, um sich überhaupt registrieren zu können. Dieser Code soll für alle der gleiche sein und muss bei Bedarf geändert werden können (d.h. ein entsprechendes Feld im Modul-Backend der Registrierung müsste her). Nur bei korrekter Eingabe dieses Passworts soll eine Registrierung und zugleich automatische Freischaltung erfolgen.

    Der Kunde begründet dies damit, dass er dann nicht 5000 Anmeldungen prüfen muss, sondern einfach den ca. 5000 Menschen einmalig den Code mitteilen muss. Fragt mich nicht, was einfacher / sicherer / sinnvoller wäre, ich frag mich das auch..

    Jedenfalls würde diese Variante ja ebenfalls vor Spam schützen, von daher eigentlich keine sooo schlechte Idee.

    Jemand nen Rat, wie ich das (updatesicher) implementiert bekomme? Ich spreche PHP nicht fließend, ganz auf den Kopf gefallen bin ich aber nicht (also verstehen tu ich das meiste, sobald ich es lese).

    Herzlich liebe Grüße und auch ansonsten einen recht angenehmen Tag,

    Papillon

  2. #2
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Man könnte von der Klasse FormCaptcha eine neue Klasse ableiten und diese per DCA registrieren. Leider gilt das Captcha dann für alle Module, die das Captcha nutzen, z.B. Formulare.

    Also müsste man auch von der Klasse ModuleRegistration ableiten, alles kopieren und die entsprechende DCA-Abfrage ändern, damit nur für die Registrierung ein neues Captcha genommen wird.

    Oder man nutzt den vorhandenen Hook, um den DCA nur für das Modul zu ändern auf die neue abgeleitete FormCaptcha. Keine Ahnung ob das so funktioniert. Müsste aber.

    Sind nur so meine Gedankengänge.

  3. #3
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard

    Hallo lomex, vielen Dank für deine Nachricht!

    Das klingt alles schlau und durchdacht, jedoch erzeugt es in dem Volumen hinter meinen Augen nur statisches Rauschen =/

    Ich habe ein wenig recherchiert und frage mich, ob ich diese Anleitung nicht irgendwie nutzen kann, um mein Ziel zu erreichen:

    Wie man einem DCA eigene Felder hinzufügt

    Um ehrlich zu sein, bin ich was Tabellen usw. angeht nicht so fit. Könntest du mir da auf die Sprünge helfen? Ich will gerne etwas dazulernen!

  4. #4
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Habe gerade mal ein wenig rumprobiert.
    Das mit dem Hook geht leider nicht. Wird dann doch auch auf andere Captcha's übertragen. Also müsste man auch an das ModuleRegistration - Modul ran.

    Zumindest kenne ich keinen besseren Weg.

    Bin aber leider die nächsten drei Tage out-of-order.

    lomex

  5. #5
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard

    Hej,

    habe noch einen Link gefunden, der evtl. von Bedeutung sein könnte.
    Ich kann damit leider nicht um, im Moment kommt wohl noch die Müdigkeit hinzu. Leider hat mir dein Beispiel aus der PN auch noch nicht viel Aufschluss bereitet. Wenn ich doch mehr davon verstehen würde.

    Hier der Link: Eigene Formularfelder erstellen

  6. #6
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Das aus der PN diente ja auch nur um einen Einstieg zu bekommen.
    Du solltest dich dann mal generell mit der Modul-Programmierung beschäftigen.
    Sonst wird es schwer.

  7. #7
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard

    Hallo Lomex,

    ohje, ich sehe schon.. so ganz ohne Know-How wird das wohl nichts. Dann frag ich doch mal ganz platt an dieser Stelle nach guten Modul-Programmier-Tutorials. Aber wo fängt man da an? Wenn ich so eine Tabelle sehe, wie z.B. auf der Referenz-Seite der DCA Container, sehe ich nur Fremdbegriffe mit überaus kurzen Erläuterungen.

    Mal auf Deutsch:
    1. Die nötigen Felder in der Datenbank anlegen:
    a) Wir brauchen eine Checkbox, damit man das Spezialcaptcha in das Formular "klicken" kann.
    b) Wir brauchen ein Texteingabefeld, was sich auftut, sobald man die Checkbox des Spezialcaptchas anklickt; in diesem soll es möglich sein, einen x-stelligen String einzugeben, der in der Datenbank verschlüsselt gespeichert wird.
    2. Das Formular im Frontend um dieses Feld erweitern und dieses Feld mandatory setzen.
    3. Eine Routine schreiben, die die Eingabe im Frontend mit dem verschlüsselten Code aus der Datenbank vergleicht und nur bei Übereinstimmung eine Registrierung durchführt und eine Aktivierung des Users veranlasst.

    Soweit hab ich das.

  8. #8
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard

    Im Grunde müsste ich doch diesen Link hier hernehmen und "nur ein paar Einträge" an meine Bedürfnisse anpassen: Eigene Formularfelder hinzufügen. Dort soll eine Auswahl für Reiseangebote erstellt werden, wenn ich das irgendwie in ein Textfeld umwandeln könnte und an mein Registrierungsmodul anhängen könnte, müsste ich doch weiterkommen.


    Edit:

    Ich bin mal diesem Tutorial gefolgt: FE-Mitglieder erweitern und kann nun im Modul auch die Code-Abfrage aktivieren. Jedoch gibt mir die install.php unentwegt "Datenbank ist nicht aktuell" aus, irgendwo läuft also etwas noch nicht ganz rund. Scheinbar gibt es die Einträger in der Datenbank ja, nur das Contao davon noch nichts mitbekommt.

    Jetzt fehlt mir im Grunde nur noch die Möglichkeit, an dieses Feld eine Bedingung zu hängen: Ich möchte den einzugebenden Code im Backend-Modul für die Registrierung vorgeben können. Und nun weiß ich wirklich nicht mehr weiter.


    Edit 2:

    Vom Prinzip her logisch: In der Datei, die die Regisrierung und Aktivierung dann durchführt, muss irgendwo ein "if (Codeeingabe == $Codevorgabe) { do; };" eingebaut werden. Gleichzeitig muss im Backend-Modul noch ein Eingabefeld erstellt werden, welches $Codevorgabe mit Informationen versorgt.

    Hier mal mein bisheriger Stand:
    wfcode.zip
    Geändert von Papillon (28.05.2011 um 10:56 Uhr)

  9. #9
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Habe mich mal dran versucht. Also zunächst mal einen Ordner system/modules/registration_kennwort anlegen (alphabetisch hinter registration).

    In DCA/tl_modul.php steht folgendes. Im Modul "Registrierung" gibt es dadurch ein Feld, wo man dass Kennwort eingeben kann.

    PHP-Code:
     $GLOBALS['TL_DCA']['tl_module']['palettes']['registration'] = '{title_legend},name,headline,type;{kennwort_legend},captcha_kennwort;{config_legend},editable,newsletters,disableCaptcha;{account_legend},reg_groups,reg_allowLogin,reg_assignDir;{redirect_legend},jumpTo;{email_legend:hide},reg_activate;{template_legend:hide},memberTpl,tableless;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space';
     
     
    $GLOBALS['TL_DCA']['tl_module']['fields']['captcha_kennwort'] = array
            (
                
    'label'     => &$GLOBALS['TL_LANG']['tl_module']['captcha_kennwort'],
                
    'exclude'   => false,
                
    'inputType' => 'text',
                
    'eval'      => array('mandatory'=>false'maxlength'=>255'decodeEntities'=>true)
     ); 
    Mit der DCA/tl_member.php wird ein neues Eingabefeld für die Mitglieder erzeugt:
    PHP-Code:
    array_insert($GLOBALS['TL_DCA']['tl_member']['fields']['captcha_kennwort'],30,
        array (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['captcha_kennwort'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=> 'true''maxlength'=>64'rgxp'=>'captcha_kennwort''feEditable'=>true'feViewable'=>true)
    )); 
    In der config/config.php wird der addCustomRegexp-Hook eingetragen. Dadurch können wir eine eigene "RegEx" - Funktion einbauen.
    PHP-Code:
    $GLOBALS['TL_HOOKS']['addCustomRegexp'][] = array('KennwortCaptcha''Kennwort'); 
    Jetzt noch die KennwortCaptcha.php anlegen. Darin enthalten ist unsere eigene RexEx - Abfrage:
    PHP-Code:
    class KennwortCaptcha {

        public function 
    Kennwort($strRegexp$varValueWidget $objWidget) {

            if (
    $strRegexp == 'captcha_kennwort') {
                
                if (
    $varValue == '1234') {
                    return 
    true;
                }
            }
           
            return 
    false;
        }

    languages/de/tl_member.php
    PHP-Code:
     $GLOBALS['TL_LANG']['tl_member']['captcha_kennwort']         = array('Kennwort''Bitte geben Sie das Kennwort ein.'); 
    languages/de/tl_module.php
    PHP-Code:
    $GLOBALS['TL_LANG']['tl_module']['kennwort_legend'] = 'Captcha-Kennwort';
    $GLOBALS['TL_LANG']['tl_module']['captcha_kennwort'] = array ('Captcha-Kennwort''Bitte tragen Sie hier das Kennwort für die Mitgliederregistrierung ein.'); 
    Die Abfrage nach dem Kennwort klappt dadurch. Leider noch ohne DB-Abfrage. Wenn man die Klasse vom Controller ableitet, erhält man Zugriff auf Import('Database'). Aber es fehlt die ID vom aktuellen Modul, um dass Kennwort aus der DB abzufragen. Hänge da. Aber vielleicht sehe ich den Wald vor lauter Bäumen gerade nicht.

    Keine Gewähr :-)

    Gruß
    lomex

  10. #10
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Habe das Kennwort mal statt im Modul unter den Einstellungen gespeichert. Damit läuft es.

    Also statt DCA/tl_modules.php eine DCA/tl_settings.php angelegt:
    PHP-Code:
     $GLOBALS['TL_DCA']['tl_settings']['palettes']['default'] = $GLOBALS['TL_DCA']['tl_settings']['palettes']['default'] . ';{captcha_legend},captcha_kennwort';
     
     
    $GLOBALS['TL_DCA']['tl_settings']['fields']['captcha_kennwort'] = array
            (
                
    'label'     => &$GLOBALS['TL_LANG']['tl_settings']['captcha_kennwort'],
                
    'exclude'   => false,
                
    'inputType' => 'text',
                
    'eval'      => array('mandatory'=>false'maxlength'=>255'decodeEntities'=>true)
     ); 
    Und die Kennwort_Captcha.php so erweitert:
    PHP-Code:
    class KennwortCaptcha extends Backend {

        public function 
    Kennwort($strRegexp$varValueWidget $objWidget) {

            
    $kennwort $GLOBALS['TL_CONFIG']['captcha_kennwort'];

            if (
    $strRegexp == 'captcha_kennwort') {
                
                if (
    $varValue != $kennwort) {
                    
    $objWidget->addError('Falsches Kennwort.');
                }

                return 
    true;
            }
           
            return 
    false;
        }

    Das Ganze mal als Anlage, so wie es bei mir läuft.
    Angehängte Dateien Angehängte Dateien

  11. #11
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard

    Wow, Klasse! Damit hab ich ja gar nicht gerechnet!

    Ich habe es gleich mal eingespielt (läuft ja sogar ohne
    das installtool) - das Kennwort lässt sich im Backend
    wie versprochen unter den Einstellungen anpassen.
    Ich habe dann ein bestehendes Registration-Modul
    gewählt und das "Kennwort" aktiviert, jedoch wird mir
    im Frontend bei der Registrierung noch kein Feld dafür
    angezeigt.

    Ich nehme an, du hast das ganze für 2.9.5 geschrieben?
    Ich werde erstmal ein Update durchführen. Bin noch auf
    2.9.4.

    Vielen allerherzlichsten Dank schonmal für deine Mühe, ich
    werd mich mal per PN melden

  12. #12
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Ist bei mir auch 2.9.4.
    Du hast auch Kennwort und nicht Passwort genommen?
    Habe das unglücklich benannt.

    Bei mir wird das Kennwort-Feld im Frontend angezeigt und die Abfrage funktioniert auch.

  13. #13
    Contao-Nutzer
    Registriert seit
    06.08.2010.
    Beiträge
    104

    Standard

    Moin,

    also ich habe bisher einfach nur das Verzeichnis in den system/modules Ordner verschoben und im Backend unter Einstellungen ein Passwort eingegeben, das wird dort auch gespeichert und weiterhin angezeigt. Dann habe ich in einem bestehenden Registrierungs-Modul ein Häkchen bei "Kennwort" gesetzt und gespeichert.

    Irgendwo gibt es einen Haken, ich weiß nur noch nicht, wo.
    Ich werde mal auf die Schnelle ein neues Modul anlegen.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •