Jump to content
xt:Commerce Community Forum

Leere Mail durch Kontaktformular


chefjaeger

Recommended Posts

@meisterengel

Da auch "Sonderzeichen" geblockt werden...

... ist allerdings das Thema "Mail Injection" unbedingt zu beachten.

Das Kontaktformular wird oft zum Hacken eines Shops missbraucht, deshalb wird das Kontaktformular extra scharf gefiltert (Sonderzeichen, etc.).

Auf die Anregungen im Forum wurde anscheinend reagiert und die Schadcode-Filter das Kontaktformular von Veyton 4.0.14 angepasst.

Link to comment
Share on other sites

  • Replies 75
  • Created
  • Last Reply

geschrieben von Oliver Förster:

Ich habe eine Anleitung für das Update xt_default Template der neuen VEYTON Version von 4.13 auf 4.14 (Community Edition) geschrieben. Die Anleitung ist ohne Gewähr auf Richtigkeit und Vollständigkeit. Die Änderungen führen Sie auf eigene Verantwortung durch.

Download-Link hier.
Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...

So, ich hab da jetzt nochmal ne weitere Stunde in diesem tollen Problem versenkt und es ist einfach nur Murks was die xt:Commerce jungs sich da zusammengeschraubt haben.

In xtFramework/security_handler.php wird in der Zeile 58 der Post Wert gefiltert.

Darum kommt dann auch schon gar nichts mehr beim Kontaktformular an wenn es nicht durch den filter kommt.

Ist zwar eine nette idee Post generell abzusichern, ABER wenn man die Filterklasse versaut bringt es nichts. Und noch bescheidener ist es wenn man eben diese verschlüsselt.

Also wer diese Zeile rausnimmt hat alles ungefiltert, dann funktioniert das ganze zwar aber der Shop ist offen wie ein Scheunentor.

Wenn man das ganze aber nun so abändert:

$customer_message = $_POST['customer_message'];
if ($post_filter) $_POST = $filter->_filterXSS($_POST);
$_POST['customer_message'] = $customer_message;[/PHP]

Dann wird der filter für die customer_message umgangen und der rest ist sicher. Lediglich muss man nun nochmal für customer_message einen eigenen filter schreiben. Aber dafür funktioniert der dann wohl auch ;)

Link to comment
Share on other sites

  • 4 weeks later...

Hallo milganti,

kannst du es genauer erklären welche Zeilen du mit was ersetzt hast.

@ XT:Commerce - Peinlich, nicht nur für den Fehler, generell das Ihr eure Kunden so etwas anbietet als Shop der nicht einmal richtig funktioniert. Man könnte euch vergleichen wie ein 'billiger Autohändler' Kein wunder das Ihr den Shop kostenlos anbietet, da A) Kunden aus bleiben B) Genug Pfeffer schon um die Ohren bekommen habt, da eure Dienstleistung nicht erbracht wurden war. Auch ich habe bezahle Lizenzen hier! Und mein Kontaktformular funktioniert IMMER noch nicht!

MACHT WAS! Das Geld habt Ihr auch eingesteckt!

Link to comment
Share on other sites

Suche:

if ($post_filter) $_POST = $filter->_filterXSS($_POST);[/PHP]

ersetze es mit:

[PHP]
$customer_message = $_POST['customer_message'];
if ($post_filter) $_POST = $filter->_filterXSS($_POST);
$_POST['customer_message'] = $customer_message; [/PHP]

Bye Det

Link to comment
Share on other sites

Ich habe das ganze bei mir mittlerweile so:

	// Filtern wenn gewünscht
if ($post_filter) {
// customer message tmp mäßig zwischenspeichern
$customer_message = $_POST['customer_message'];
// Original Filterbefehl von xt:Commerce
$_POST = $filter->_filterXSS($_POST);

if($customer_message) {
// customer message selber filtern
$customer_message = strip_tags($customer_message); // Tags entfernen
$customer_message = preg_replace ("/([\r\n])\.([\r\n])/", "$1..$2", $customer_message); // einzelnen punkt ersetzen
$customer_message = trim($customer_message, ".\n");
$customer_message = trim($customer_message, "\n.");
// customer message zurückschreiben
$_POST['customer_message'] = $customer_message;
}
}[/PHP]

Zur erklärung:

Erst wieder die Nachricht gesichert, dann wird normal alles was über Post kommt gefiltert.

Anschließend werden wenn eine Nachricht übermittelt wurde aus dieser alle Tags entfernt. Da das ganze hier nicht in eine Datenbank kommt sondern nur als Mail weiter verschickt wird sollte das ganze zur Sicherheit genügen.

Darüber hinaus werden alleinstehende Punkte entfernt (also in einer Zeile). Denn dieses könnte bei einigen Mailservern zu Fehlern führen.

Zum schluß wird das ganze wieder zurückgeschrieben sodass das Kontakformular damit arbeiten kann.

Link to comment
Share on other sites

  • 4 weeks later...

Hallo nochmal,

mir wurde vor kurzem bestätigt, dass das leere Kontaktformular welches z.B. durch " und ' usw. verursacht worden war, durch das Update 4.0.14 behoben worden ist. Leider hat sich mit dem neuem Update bei mir nichts geändert. Würde mich mal interessieren wem das Update hier geholfen hat, um evtl. Lösungsmöglichkeiten zu erörtern.

Nach langem Ping Pong mit den Mitarbeitern von Xt:Commerce, sind diese dazu geneigt den Fehler bei mir zu suchen (da sie diesen Fehler nicht reproduzieren können), und können mir ohne zusätzliche Kosten leider nicht weiterhelfen. Um wirklich alles auszuschließen, Plugins, Datenbank, Templates usw., habe ich ausnahmslos alles gelöscht und den kompletten Shop 4.0.14 neu Installiert (ohne irgendwelche Extras, praktisch nackt) und eine neue Datenbank eingerichtet. Der Fehler bleibt und ich bin Ratlos.

@milganti

Ich habe deinen Code in die Zeile 68 beim security_handler.php (Version 4616 2011-03-30) eingefügt und somit die Zeile 68

if ($post_filter) $_POST = $filter->_filterXSS($_POST);[/PHP]

ersätzt.

[PHP]@version $Id: security_handler.php 4616 2011-03-30 16:57:41Z mzanier $

defined('_VALID_CALL') or die('Direct Access is not allowed.');

require_once _SRV_WEBROOT._SRV_WEB_FRAMEWORK.'classes/class.filter.php';
$filter = new filter();
$_GET = $filter->_filterXSS($_GET);

if(USER_POSITION!='admin'){
$post_filter = true;
if (isset($_GET['page']) && isset($_GET['page_action'])) {
if ($_GET['page']=='callback') {
// check if plugin extists!
$_pagename=$filter->_filter($_GET['page_action'],'pagename');
$_file = _SRV_WEBROOT.'plugins/'.$_pagename.'/callback/class.ip_restriction.php';
if (file_exists($_file)) {
include $_file;
$_class = $_pagename.'_ip';
$_ip_restriction = new $_class;
if ($_ip_restriction->_allowedIP()) {
$post_filter=false;
} else {

$log_data = array();
$log_data = array();
$log_data['module'] = 'callback';
$log_data['class'] = 'error';
$log_data['error_msg'] = 'Callback IP Blocked';
$log_data['error_data'] = serialize(array('Unallowed IP'=>$_SERVER['REMOTE_ADDR'],'payment_class'=>$_pagename));
$log_data['transaction_id']='';
$db->AutoExecute(TABLE_CALLBACK_LOG,$log_data,'INSERT');
die('Access to the Service is not allowed from your IP Address');
}
}
}

}
// cao exception
if (strstr($_SERVER['PHP_SELF'],'cronjob.php') && isset($_POST['action']) && isset($_GET['password']) && isset($_GET['user'])) $post_filter=false;
// Filtern wenn gewünscht
if ($post_filter) {
// customer message tmp mäßig zwischenspeichern
$customer_message = $_POST['customer_message'];
// Original Filterbefehl von xt:Commerce
$_POST = $filter->_filterXSS($_POST);

if($customer_message) {
// customer message selber filtern
$customer_message = strip_tags($customer_message); // Tags entfernen
$customer_message = preg_replace ("/([\r\n])\.([\r\n])/", "$1..$2", $customer_message); // einzelnen punkt ersetzen
$customer_message = trim($customer_message, ".\n");
$customer_message = trim($customer_message, "\n.");
// customer message zurückschreiben
$_POST['customer_message'] = $customer_message;
}
}

$_COOKIE = $filter->_filterXSS($_COOKIE);

?>[/PHP]

Der Code funktioniert offenbar wie er soll. Es werden z.B. > rausgelöscht und alle Nachrichten mit " ' usw. übertragen, allerdings geht das nur beim Kontaktformular. [b]Aber[/b] bei der "Bemerkung" innerhalb des Bestellvorgangs ändert sich nichts. Kannst du mir vielleicht sagten ob du da auch was gemacht hast und ob es bei dir klappt.

vielen Dank!

Link to comment
Share on other sites

  • 2 weeks later...

@J_Kroeger

Das ist wirklich unglaublich, es funktioniert, nach so langer Zeit und nervenaufreibenden 13 Monaten. Vielen Dank! Danke auch an die Bemühungen von Xt: Commerce Team.

Es kommen jetzt alle Nachrichten durch, sowohl bei Kontakt als auch beim Bemerkungsfeld. Bei den Problemzeichen " ' \ setzt er jetzt immer \ davor, aber diese werden überhaupt angezeigt. Vielen herzlichen Dank nochmal, großartige Arbeit.

Link to comment
Share on other sites

OK Leute - ist ja schön und gut.

Diese Maßnahme der kastrierterten Nachrichten diente ja auch zum Schutz vor Schadcode.

Wie ist es mit der Shop-Sicherheit vor Schadcode über das Formular wenn man das Kontaktformular so hart öffnet?

Wenn du sagen willst das "magic_quotes_gpc" nicht mehr den aktuellen Sicherheitsstandards entspricht und sowieso mit PHP 6 Geschichte ist, dann hast du wohl Recht. Aber was soll man denn sonnst machen?

Was passiert eigentlich wenn man "magic_quotes_gpc" aktiviert, wird es dem eigenem Veyton Filter übergeordnet? Werden die Nachrichten doppelt maskiert?

Wie sieht es eigentlich mit "mysql_real_escape_string" aus, kann man das für sich nutzen, wenn ja, wo am besten einsetzten?

Link to comment
Share on other sites

  • 1 year later...

Wenn du sagen willst das "magic_quotes_gpc" nicht mehr den aktuellen Sicherheitsstandards entspricht und sowieso mit PHP 6 Geschichte ist, dann hast du wohl Recht. Aber was soll man denn sonnst machen?

Was passiert eigentlich wenn man "magic_quotes_gpc" aktiviert, wird es dem eigenem Veyton Filter übergeordnet? Werden die Nachrichten doppelt maskiert?

Wie sieht es eigentlich mit "mysql_real_escape_string" aus, kann man das für sich nutzen, wenn ja, wo am besten einsetzten?

Die Sicherung durch die Funktion "mysql_real_escape_string" wird nur dann benötigt, wenn du (wie der Name schon sagt) die Daten an eine Datenbank übergibst bzw. im Zusammenhang mit einem Datenbankzugriff diese Daten verwendest.

Das ist derzeit bei XTC nur dann der Fall, wenn du die Filter für die Bestellungs-Bemerkung ändern willst.

Die bisher genannten Änderungen für die "Customer_Message" umgehen den Filter für eine per E-Mail abgeschickte Information. Dort haben Hacker (meines Wissens nach) keinen Zugriff auf die Datenbank.

Es wäre zwar eine zusätzliche Sicherheitsmaßnahme die im Grunde nicht schadet, aber dafür darfst du dann in der E-Mail auch preparierte Anführungszeichen/Hochkommas vorfinden (also alle " sind \" und ' werden zu \').

Schönen Gruß,

Simon

Link to comment
Share on other sites

  • 2 months later...

Hallo zusammen,

heute bin ich auch auf dieses Problem gestoßen.

Erstmal zu mysql_real_escape_string dies wird dort nicht benötigt, da VEYTON scheinbar alles von Haus aus escaped was an die DB geschickt wird.

Alle die bis hier her gelesen haben, haben sicher festgestellt, dass der Fehler nicht nur im Kontaktformular auftritt, sondern auch im Feld Bemerkungen beim Bestellprozess.

Da es keine komplette Lösung gab, habe ich selber eine geschrieben.

Hier geht es zu meiner Lösung: http://www.xt-commerce.com/forum/fragen-zur-software/95541-l-sung-kontaktformular-und-bemerkung-leer.html

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
  • Create New...