#188 closed Erweiterung (fixed)
Fehlerhafte Login-Versuche loggen
| Reported by: | Torsten Riemer | Owned by: | somebody |
|---|---|---|---|
| Priority: | normal | Milestone: | modified-shop-2.0.0.0 |
| Component: | Sicherheit | Version: | 1.06 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
Angeregt durch das Thema "Script Kiddies?" habe ich hier den Wunsch von Benutzer "ShopNix" nochmal festgehalten:
Das Thema kommt immer mal wieder hoch, und ich denke, ich habe jetzt einen ideale Ansatz gefunden.
Jeder Anmeldeversuch kommt in login.php raus, und genau an den zwei Stellen, an denen die Fehlermeldung hochkommt, schreibe ich in per error_log() eine Meldung.
Auf meinem System kommt die im Fehlerprotokoll des Webservers an, solange ich in php.ini nicht explizit etwas anderes angebe.
Dort kann ich sie z.B. über fail2ban sehr differenziert zur Sperrung der IP-Adresse verwenden.
Code, ca. ab Zeile 50:
if (!xtc_db_num_rows($check_customer_query)) {
$_GET['login'] = 'fail';
$info_message = TEXT_NO_EMAIL_ADDRESS_FOUND;
@error_log('modified login: mail address failed:');
} else {
$check_customer = xtc_db_fetch_array($check_customer_query);
// Check that password is good
if (!xtc_validate_password($password, $check_customer['customers_password'])) {
$_GET['login'] = 'fail';
$info_message = TEXT_LOGIN_ERROR;
@error_log('modified login: password failed');
} else {
Wäre schön, wenn wir das in den Standard bekämen!
Attachments (0)
Change History (8)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
neue Tabelle
CREATE TABLE IF NOT EXISTS `sec_login_errors` ( `entry_id` int(11) NOT NULL AUTO_INCREMENT, `email_address` varchar(96) NOT NULL, `error_type` varchar(60) NOT NULL, `error_date` datetime NOT NULL, `used_page` varchar(50) NOT NULL, `session_id` varchar(32) NOT NULL, `ip_address` varchar(39) NOT NULL, PRIMARY KEY (`entry_id`))
in xtc_validate_password.inc.php neu
function xtc_log_failed_login($email_address, $error_type, $used_page, $ip_address){
if(LOG_LOGIN_FAILURES==true){
$currentdate=date('Y-m-d h:i:s');
$ses_id = session_id();
xtc_db_query("INSERT INTO sec_login_errors (email_address, error_type, error_date, used_page, ip_address, session_id) VALUES ('". $email_address."','". $error_type."', '". $currentdate ."', '".$used_page."','". $ip_address."','". $ses_id. "')");
// xtc_db_query("INSERT INTO " . TABLE_SEC_LOGIN_ERRORS . " (email_address, error_type, error_date, used_page, ip_address, session_id) VALUES ('". $email_address."','". $error_type."', ".now()." ,'". $used_page."','". $ip_address."','". $ses_id. "')");
}
}
in login.php ändern
// Check if email exists
$check_customer_query = xtc_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");
if (!xtc_db_num_rows($check_customer_query)) {
$_GET['login'] = 'fail';
$info_message = TEXT_LOGIN_ERROR;
// FAILED LOGIN - Start
xtc_log_failed_login($email_address, 'emailaddress does not exist', 'login.php', xtc_get_ip_address());
// FAILED LOGIN - End
} else {
$check_customer = xtc_db_fetch_array($check_customer_query);
// Check that password is good
if (xtc_validate_password($password, $check_customer['customers_password'], $check_customer['customers_id']) !== true) {
$_GET['login'] = 'fail';
$info_message = TEXT_LOGIN_ERROR;
// FAILED LOGIN - Start
xtc_log_failed_login($email_address, 'wrong password', 'login.php', xtc_get_ip_address());
// FAILED LOGIN - End
} else {
follow-up: 4 comment:3 by , 12 years ago
if(LOG_LOGIN_FAILURES==true)
wo kommt das her und wo sind die Texte für den Admin?
comment:4 by , 12 years ago
Replying to anonymous:
if(LOG_LOGIN_FAILURES==true)
Neuer Eintrag in Tabelle configuration, um Logging ggf. zu deaktivieren
wo kommt das her und wo sind die Texte für den Admin?
Wenn das so akzeptiert ist kann man auch die Einträge im Admin coden, außerdem müssen auch die Login-Versuche für login_admin.php protokolliert werden.
comment:5 by , 9 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
login Fehler werden bereits gespeiechert und entsprechend mit Captcha versehen
comment:6 by , 9 years ago
| Milestone: | modified-shop-2.1.0.0 → modified-shop-2.0.0.0 |
|---|---|
| Version: | 2.0.1.0 → 1.06 |

Bitte über den Admin ein- und ausschaltbar machen über die TABLE_CONFIGURATION und die entsprechenden Sprachkonstanten & Texte bereitstellen.
Nicht jeder möchte durch solche Informationen seinen Error-Log füllen, denn viele Kunden vergessen oft ihr Passwort oder die im Shop verwendete E-Mailadresse.