v1.1.1CE: newsletter.php: ungeprüfter Eintrag der Emailadresse in die DB

  • Hallo Leute,

    beim Testen unserer v1.1.1-Installation ist uns aufgefallen, dass bei der Newsletteranmeldung der angegebene String ungeprüft in DB geschrieben wird.
    In weiteren Queries der newsletter.php wird ebenfalls der ungeprüfte Wert von $_POST['email'] oder $_GET['email'] verwendet.

  • Hi Folks,

    anbei ein echter Quick'n Dirty für das Problem.
    Aber: Ich Noob - KEINE GARANTIE!

    /newsletter.php
    Suche nach:

    Code
    require_once (DIR_FS_INC.'xtc_validate_password.inc.php');


    und füge drunter ein:
    (PHP >= 5.2.0)

    Code
    require_once (DIR_FS_INC.'xtc_validate_email.inc.php');$error = false;if (isset($_GET['info_message'])) $info_message = $_GET['info_message'];if (isset($_GET['email'])){    $_GET['email'] = filter_input(INPUT_GET, 'email', FILTER_SANITIZE_EMAIL);    $email_address = filter_var($_GET['email'] ,FILTER_VALIDATE_EMAIL );}if (isset($_POST['email'])){    $_POST['email'] = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);    $email_address = filter_var($_POST['email'] ,FILTER_VALIDATE_EMAIL );}if ((isset($_GET['email']) || isset($_POST['email'])) && xtc_validate_email($email_address) == false) {         $error = true;        unset($_POST['email']);        unset($_GET['email']);}if ($error !== false) xtc_redirect(xtc_href_link(FILENAME_NEWSLETTER, 'info_message=Die eingegebene eMailadresse ist nicht korrekt.'));

    PHP < 5.2.0

    Code
    require_once (DIR_FS_INC.'xtc_validate_email.inc.php');$error = false;if (isset($_GET['info_message'])) $info_message = $_GET['info_message'];if (isset($_GET['email'])){    $email_address = $_GET['email'];}if (isset($_POST['email'])){    $email_address = $_POST['email'];}if ((isset($_GET['email']) || isset($_POST['email'])) && xtc_validate_email($email_address) == false) {         $error = true;        unset($_POST['email']);        unset($_GET['email']);}if ($error !== false) xtc_redirect(xtc_href_link(FILENAME_NEWSLETTER, 'info_message=Die eingegebene eMailadresse ist nicht korrekt.'));


    Was mir gar nicht daran gefällt, ist das (zumindest in meinem Code) ungeprüfte übernehmen des $_GET['info_message'] und die hardgecodete Fehlermeldung in DE.

    Code
    domain.tld/newsletter.php?info_message=<script type="text/javascript">alert('Gute Güte');</script>
    bzw. urlencoded:
    domain.tld/newsletter.php?info_message=%3Cscript%20type=%22text/javascript%22%3Ealert(%27Gute%20G%FCte%27);%3C/script%3E


    wird zwar nicht ausgeführt (sollte "Gute Güte" per JS alerten), aber weitere Tests hab ich noch nicht gemacht.
    Ich poste das jetzt auch nur, weil ich nächste Woche eher wenig Zeit hab und mE ist die Lösung zumindest weniger schlimm ist, als die Eintragung beliebiger Strings in die DB.

    Hoffe es hilft ...