php - FILTER_VALIDATE_EMAIL

标签 php forms email

我知道之前已经讨论过这个问题,但自从 2010 年底发表这篇文章以及当时提出问题的其他讨论以来 - Does FILTER_VALIDATE_EMAIL make a string safe for insertion in database? - 我已经尝试了所描述的一些情况,例如在我使用 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>

最佳答案

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这将解释一些事情,这里还有一个简单的 pdo CRUD(创建检索更新删除)类:http://www.phpro.org/classes/PDO-CRUD.html

祝你好运......

关于php - FILTER_VALIDATE_EMAIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398025/

相关文章:

php - 如何覆盖 composer.json 中的其他依赖项

node.js - 使用 busboy 从表单中获取字段值

php - PHP邮件功能无法完成电子邮件的发送

php - 动态链式选择框

php - 什么原因 Undefined property : stdClass?

javascript - 动态向 Laravel 表单添加字段

java - 通过 JavaMail 发送到 gmail 时的 TLS 问题

ruby-on-rails - 为什么特定环境不会在这里覆盖 rails 中的 environment.rb?

php - 我的 URL 中需要连字符

javascript - 如果两个字段不匹配,则 Angular 形式错误