CPO 4.1.5: CSRF check failed
- Mr. Magpie
- ConPresso-Profi
- Beiträge: 1004
- Registriert: 01.01.1970 01:00
- Wohnort: Wuppertal
- Hat sich bedankt: 274 Mal
- Danksagung erhalten: 59 Mal
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Frontend-Login via member.php oder eigenes Formular?eine Seite mit cpo 4.1.6 erstellt, inkl. frontend login
Mit eigenen Formularen (wie im Handbuch beschrieben) geht das nicht mehr, weil das anticsrf-Token fehlt.
Hier
http://community.conpresso.de/viewtopic ... 7339#27339
habe ich ein Workaround mittels mod_functions beschrieben.
Ciao Markus
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-Experte
- Beiträge: 547
- Registriert: 04.07.2007 17:12
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 7 Mal
Hallo Markus,
ja, über eigenes Formular... darum geht es also nicht mehr
Wenn ich recht verstehe, funtioniert die Lösung mit mod_functions nur in Seitentemplates bzw. mit der mod-Version 4.2 auf Artikel/-template-Ebene.
Eine Lösung für global_header oder global_footer gibt es nicht zufällig?
Gruß,
dutch
ja, über eigenes Formular... darum geht es also nicht mehr
Wenn ich recht verstehe, funtioniert die Lösung mit mod_functions nur in Seitentemplates bzw. mit der mod-Version 4.2 auf Artikel/-template-Ebene.
Eine Lösung für global_header oder global_footer gibt es nicht zufällig?
Gruß,
dutch
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Grundsätzlich funktionieren ALLE in mod_functions definierten Funktionen auch im PHP-Code!
ein Token erstellen und ein hidden-input ausgeben lassen.
Dazu schaust Du Dir in _include/member.inc.php einfach mal den Block ab
an.
Du kannst aber auch einfach mittelsIm Seitentemplate steht die Funktion dann als
<!-- function: FUNKTIONSNAME; argument1=WERT; argument2=WERT; -->
zur Verfügung, wird aber auch zusätzlich als PHP-Funktion FUNKTIONSNAME($argument1, $argument2) angelegt
Code: Alles auswählen
$antiCSRF->printInput('dologin');
Dazu schaust Du Dir in _include/member.inc.php einfach mal den Block ab
Code: Alles auswählen
case 'login':
Ciao Markus
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-Experte
- Beiträge: 547
- Registriert: 04.07.2007 17:12
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 7 Mal
Hallo Markus,
danke für den Tipp.
Das müsste dann hier eingebaut werden?
Muss die Zeile in die If-Anweisung? - Bin halt kein PHPer ....
Gruß,
dutch
danke für den Tipp.
Das müsste dann hier eingebaut werden?
Code: Alles auswählen
case 'dologin': // {{{
if (!$antiCSRF->checkToken()) {
$message[] = ___('Security check failed. Please try again.');
logaction('login', 'CSRF check failed.');
break;
}
Gruß,
dutch
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
nicht "case: 'dologin':" sondern "case: 'login':"
sieht so aus:
Da sieht Du, daß innerhalb des Formulares die Zeile
steht.
Leider kenne ich Deinen Code nicht.
Ist das ein PHP-Code, dann reicht die Zeile
Ist das ein HTML-Code dann eben
Wäre immer hilfreich, wenn Du Deinen Code postest, denn die Original-ConPresso-Dateien habe ich, aber Deinen Code kenne ich nicht (und auch sonst niemand)...
sieht so aus:
Code: Alles auswählen
case 'login': // {{{
include(CPO_BASEDIR.'_include/message.php'); // FIXME STEFFEN, wirklich diese Messages benutzen?
echo '<form method="post" action="'.htmlspecialchars($_SERVER['PHP_SELF'], ENT_COMPAT, 'ISO-8859-15').'">';
$antiCSRF->printInput('dologin');
echo '<input type="hidden" name="rubric" value="'.(int)$GLOBALS['cpoRubric']['id'].'">';
if (!empty($_nview))
echo '<input type="hidden" name="nview" value="'.htmlspecialchars($_nview, ENT_COMPAT, 'ISO-8859-15').'">';
echo ___('Please enter your username and password.', $GLOBALS['cpoRubricSettings']['language']).'<br /><br />';
echo ___('Login:', $GLOBALS['cpoRubricSettings']['language']).'<br />';
echo '<input type="text" name="username"><br />';
echo ___('Password:', $GLOBALS['cpoRubricSettings']['language']).'<br />';
echo '<input type="password" name="password"> ';
echo '<input type="submit" class="button" value="'.___('log in', $GLOBALS['cpoRubricSettings']['language']).'">';
echo '<br />';
if ($GLOBALS['GLOBALS']['cpoSystem']['send_pw']) {
echo '<a href="'.htmlspecialchars($_SERVER['PHP_SELF'], ENT_COMPAT, 'ISO-8859-15').'?action=password_reset&rubric=' . (int)$GLOBALS['cpoRubric']['id'] . '">'.__('Reset password', $GLOBALS['cpoRubricSettings']['language']).'</a>';
}
echo '</form>';
break; // }}
Code: Alles auswählen
$antiCSRF->printInput('dologin');
Leider kenne ich Deinen Code nicht.
Ist das ein PHP-Code, dann reicht die Zeile
Code: Alles auswählen
$antiCSRF->printInput('dologin');
Code: Alles auswählen
<?php $antiCSRF->printInput('dologin'); ?>
Ciao Markus
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-Experte
- Beiträge: 547
- Registriert: 04.07.2007 17:12
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 7 Mal
Hallo Markus,
ja, blöd, hätte gleich den code mitschicken sollen...
Der sah so aus:
Jetzt sieht er so aus, und damit klappt's!:
Vielen Dank für die Hilfe!
Gruß,
dutch
ja, blöd, hätte gleich den code mitschicken sollen...
Der sah so aus:
Code: Alles auswählen
<?php
if (empty($_SESSION['SID_log_login_id'])) {
echo '<div id="loginVeld">';
echo '<form method="post" action="/cms/documents/member.php">';
echo '<input type="hidden" name="action" value="dologin" />';
echo '<input type="hidden" name="rubric" value="16" />';
echo 'Username:<br />';
echo '<input type="text" name="username" />';
echo 'Password:<br />';
echo '<input type="password" name="password" />';
echo '<input type="submit" value="login" class="btnVerzenden" />';
if ($GLOBALS['cpoSystem']['send_pw']) {
echo '» <a href="member.php?action=password_reset&rubric=';
echo htmlspecialchars($cpoRubric['id']).'">Can\'t remember password?</a>';
}
echo '</div>';
} else {
echo '<div id="logoutVeld">';
echo 'Welcome '.htmlspecialchars($_SESSION['SID_user']['name']).'';
echo '<p class="documents"><a href="/cms/documents/index.php">documents</a></p>';
echo '» <a href="member.php?action=logout&rubric=Home">';
echo '<strong>Logout</strong></a>';
echo '</div>';
}
?>
Jetzt sieht er so aus, und damit klappt's!:
Code: Alles auswählen
<?php
if (empty($_SESSION['SID_log_login_id'])) {
echo '<div id="loginVeld">';
echo '<form method="post" action="/cms/documents/member.php">';
$antiCSRF->printInput('dologin');
echo '<input type="hidden" name="action" value="dologin" />';
echo '<input type="hidden" name="rubric" value="16" />';
echo 'Username:<br />';
echo '<input type="text" name="username" />';
echo 'Password:<br />';
echo '<input type="password" name="password" />';
echo '<input type="submit" value="login" class="btnVerzenden" />';
if ($GLOBALS['cpoSystem']['send_pw']) {
echo '» <a href="member.php?action=password_reset&rubric=';
echo htmlspecialchars($cpoRubric['id']).'">Can\'t remember password?</a>';
}
echo '</div>';
} else {
echo '<div id="logoutVeld">';
echo 'Welcome '.htmlspecialchars($_SESSION['SID_user']['name']).'';
echo '<p class="documents"><a href="/cms/documents/index.php">documents</a></p>';
echo '» <a href="member.php?action=logout&rubric=Home">';
echo '<strong>Logout</strong></a>';
echo '</div>';
}
?>
Gruß,
dutch