是否有与电子邮件注入相同的mysql_real_escape_string()?我有一个用户提交电子邮件的表单。我担心有人可以插入逗号分隔的电子邮件列表并使用我的网站发送垃圾邮件。
答案 0 :(得分:31)
您可以使用filter_var
验证电子邮件地址:
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
// invalid e-mail address
}
答案 1 :(得分:2)
只需针对单个电子邮件地址的常见正则表达式验证该字段
function validate_email($e){
return (bool)preg_match("`^[a-z0-9!#$%&'*+\/=?^_\`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_\`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`i", trim($e));
}
答案 2 :(得分:1)
对于那些旧版本的人
/*
# PHP Email Validation for versions LESS than PHP 5.2.0)
*/
$strEmail= mysql_real_escape_string($_POST['email_e']);
if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $strEmail)){
// valid email
} else {
// not a valid email
}
答案 3 :(得分:0)
如果您的主要问题是,如问题所示,要验证用户是否未尝试通过输入以逗号分隔的地址列表来诱骗您为他们发送垃圾邮件,那么仅仅检查是否存在明显的答案是用户输入中的逗号吗?
答案 4 :(得分:0)
我发现好的电子邮件验证并不那么简单,所以决定检查“@”和“。”在字符串中。
function email_valid($email){
/* EMAIL VALIDATION, CHECKS IF STRING CONTAINS "@" and "." */
if( strpos($email, "@") AND strpos($email, ".") ){
return TRUE;
}
else {
return FALSE;
}
}
P.S。如果你不使用PDO预处理语句写入数据库,请务必过滤掉可能导致sql注入的符号
答案 5 :(得分:0)
检查总字符串长度会更简单 - 即本地部分最大64位+ @ +域节最多255个字符= 320个字符,但是仍然可以发送垃圾邮件短地址。我目前正在研究我的项目的电子邮件验证,并找到了这篇有趣的文章email validation,它解释了深入有效的电子邮件地址和rfc2822。在那里,他们提出了一种更简单的验证方法,可以防止逗号分隔列表成为垃圾邮件的有效形式。
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
$isValid = false;
}
else
{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
// ... work with domain and local parts
}
这只是通过查找最后一个@符号来断开电子邮件地址,并声明在它之前传递的所有内容都是地址的本地部分,其中限制为64个字符。如果没有@符号,则strrpos将返回bolean值false。我将在验证函数中使用它。