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
    1. require_once (DIR_FS_INC.'xtc_validate_password.inc.php');


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

    Code
    1. 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
    1. 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
    1. domain.tld/newsletter.php?info_message=<script type="text/javascript">alert('Gute Güte');</script>
    2. bzw. urlencoded:
    3. 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 ...