FILTER_VALIDATE_EMAIL - PullRequest
       2

FILTER_VALIDATE_EMAIL

3 голосов
/ 22 февраля 2012

Я понимаю, что это обсуждалось ранее, но с момента публикации этого сообщения в конце 2010 года и других обсуждений в то время, когда возникли проблемы - Делает ли FILTER_VALIDATE_EMAIL строку безопасной для вставки в базу данных? - я пробовал несколькоиз описанных ситуаций, таких как использование одинарных кавычек и символов `в форме электронной почты, где я использую FILTER_VALIDATE_EMAIL, и это заблокировало их от ввода в базу данных.

В последних выпусках PHP исправлены более ранние проблемы иэто безопасно?

Я испытываю желание использовать mysql_real_escape_string (), предположительно, две функции могут использоваться параллельно без какого-либо конфликта?

Вот код списка рассылки, который я использую для помещения адресов в базу данных

    <?php
// connects the database access information this file
include("mailing_list_include.php");

// the following code relates to mailing list signups only
if (($_POST) && ($_POST["action"] == "unsub")) {
// trying to ubsubscribe; validate email addresses
if ($_POST["email"] == "") {
    header("Location: mailing_list_remove.php");
    exit;

} else {
    // connect to database
    doDB();

    // filtering out anything that isn't an email address
    if ( filter_var(($_POST["email"]), FILTER_VALIDATE_EMAIL)  == TRUE) {
        echo '';
    } else {
        echo 'Invalid Email Address';
        exit;
    }

    // check that email is in the database
    emailChecker($_POST["email"]);

    // get number of results and do action
    if (mysqli_num_rows($check_res) < 1) {
        // free result
        mysqli_free_result($check_res);

        // print failure message
        $display_block = "We couldn't find ".$_POST["email"].". No action has therefore been taken.";

    } else {
        // get value of ID from result
        while ($row = mysqli_fetch_array($check_res)) {
            $id = $row["id"];
        }

        // unsubscribe the address
        $del_sql =  "DELETE FROM subscribers
                    WHERE id = '".$id."'";
        $del_res =  mysqli_query($mysqli, $del_sql)
                    or die(mysql_error($mysqli));
        $display_block = " Your email address, ".$_POST["email"].", is unsubscribed!";
    }
    mysqli_close($mysqli);
}
}
?>
<html>
<?php echo "$display_block";?>
</html>

1 Ответ

3 голосов
/ 22 февраля 2012

Флаг filter_var FILTER_VALIDATE_EMAIL будет делать то, что говорит = проверять значение как электронное письмо, то есть, если это не электронное письмо, он вернет false.

Возможно, вы ищете FILTER_SANITIZE_EMAIL, который будет (удалить все символы, кроме букв, цифр и! # $% & '* + - / =? ^ _ `{|} ~ @. [])

или FILTER_SANITIZE_STRING Удалит теги, при желании удалит или закодирует специальные символы.

То есть я не рекомендую w3schools, в котором есть список флагов filter_var http://www.w3schools.com/php/php_ref_filter.asp

Также, как уже говорили другие, используйте готовый запрос PDO, чтобы быть безопасным, вы можете найти отличный пример pdo здесь: http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html#10, который объяснит несколько вещей, а также есть простой CRD pdo (Create Retrieve Update Delete ) класс здесь: http://www.phpro.org/classes/PDO-CRUD.html

удачи ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...