这是注册接收我们网站上的电子邮件新闻更新的代码。它工作得很好,除非电子邮件地址在@之后有一个连字符,然后它会抛出一个错误框:
> The page at http://www.MySite.com says:
>
> Please Fix the following:
>
> E-mail
test-test@test.com有效,但test@test-test.com没有。有任何想法吗?
来自email.js
:
function checkSubmit(thisDept){
var email = $('email').value;
var message = "Please Fix the following: \r\n";
var emailpat = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;
if( !email.match(emailpat) ) {
message += "E-mail \r\n";
}
if(message == "Please Fix the following: \r\n"){
submitEmail(email,thisDept);
} else {
alert(message);
}
}
function submitEmail(email,thisDept){
new Ajax.Updater( "EAlertContainer","php/ealerts.php", {
method: 'post', parameters: { email: email } });
}
编辑:感谢您对我发布的原始代码漏洞的所有疑虑。我敢肯定,逃避它的正确方法是:
mysql_select_db("DATABASE",$dbx);
$email=mysql_real_escape_string ($email);
$queryx = "INSERT into master_email (emailid,cellmail,email) VALUES ('','','".$email."')";
是/否?
答案 0 :(得分:1)
试试这个:
var emailpat = /^[^@]+@[^@]+\.[^@\.]{2,}$/;
电子邮件地址应该只有一个@ -sign,而且不能是第一个字符。在@之后,你需要至少一个点,然后是2个或更多的字母。
是的,这也接受无效的电子邮件地址。如果您想确保用户输入有效的电子邮件地址,您应该向该地址发送电子邮件并等待用户采取行动(即输入电子邮件中的代码)。
修改强>
更新了正则表达式,因此域部分不再局限于罗马字母TLD。允许使用其他字母表,但可能不太常见(但)。请参阅维基百科examples。
答案 1 :(得分:0)
试试这个。
$queryr = sprintf("SELECT emailid FROM master_email WHERE email LIKE '%s' LIMIT 1",
mysql_real_escape_string($email));
并对插入查询执行相同的操作。
另外,你只是要求SQL注入:P