如何使用正则表达式根据javascript中的php电子邮件注入验证电子邮件地址
How to validate an e-mail address against php e-mail injection in javascript using regex?
我想避免在电子邮件地址中出现%
符号
因此,用户不会在电子邮件中添加其他标头。
然而,我完全被regex淹没了,找不到解决方案。
到目前为止,我有
/[%]+/
但在我的整个代码中,这确实验证了像test@example.com%
这样的电子邮件地址为true
这是由于Firefox和Chrome在为input
指定type="email"
时进行了内部电子邮件检查!!!
function validateEmail(sEmail) {
var filter = /^[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*'.)+[a-z]{2,4}$/;
filter2 = /^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*/;
filter3 = /[%]+/
if (filter.test(sEmail) && filter2.test(sEmail) && !filter3.test(sEmail)) {
return true;
} else {
return false;
}
}
Btw。由于到目前为止我自己完全无法写这篇文章,我找到了两个解决方案,我不确定哪一个更好。上一个(1)或2:
/^(['w-'.]+)@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.)|((['w-]+'.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(']?)$/
你觉得怎么样?
您不应该使用正则表达式来防止注入。相反,使用准备好的sql语句:
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
除非你完全理解什么是有效的电子邮件地址,否则我不会使用regex。相反,你应该参数化所有值,这样即使插入了恶意代码,它也会将其视为字符串。参见OWASP:
https://www.owasp.org/index.php/Query_Parameterization_Cheat_Sheet
我看到你改变了问题。实际上,您对修复PHP电子邮件头注入很感兴趣。这比简单地过滤掉电子邮件地址中的一个字符要复杂得多。您需要检查黑客/机器人是否试图注入多部分/表单数据(尤其是换行符/回车符,它将头与多部分消息的正文分隔开)、操作表单和会话变量以及过滤名称和其他字段(不应包含特殊字符)。
电子邮件地址过滤不足以防止攻击。机器本身也需要正确配置。遵循本指南,尽可能防止php注入(包括过滤换行和软件配置的示例):http://static.askapache.com/pdf/xss-csrl-injection.pdf
相关文章:
- php&js-将电子邮件添加到输入文本中
- 将用户制作的SVG(raphael.js)发送到服务器(php),以便通过电子邮件发送
- jSignature图像导出到PHP电子邮件
- 蛋糕PHP电子邮件 - 包括电子邮件中的链接
- 从 postmaster@domain.co.uk 收到的 PHP 电子邮件表单
- 使用AngularJs,尝试通过Google App Engine上的PHP使用HTML联系我们表单发送电子邮件
- 当用HTML5+JS+PHP设计发送到电子邮件的表单时,需要采取哪些良好的安全预防措施
- 有没有办法检测电子邮件地址的假域名?使用Perl、php、javascript
- PHP电子邮件联系表格
- 如何使用正则表达式根据javascript中的php电子邮件注入验证电子邮件地址
- 使用php将表单数据发送到电子邮件
- 用于电子邮件比较/验证的PHP代码
- 使用PHP和Javascript为每个用户电子邮件生成新的哈希
- 使用PHP,JQuery,Ajax将电子邮件添加到MySQL数据库中
- 从Mandril,Sendgrid或任何API PHP代码发送批量电子邮件
- 使用 PHP 和 Jquery 将表单输入字段添加到电子邮件中
- 如何通过 PHP 将多个复选框值发送到电子邮件
- 如何在PHP中从
中提取电子邮件 - HTML/PHP 电子邮件表单
- 简单的ajax调用数据库来验证电子邮件PHP编码器