我是否需要保护未连接到数据库的表单

时间:2015-04-20 05:35:44

标签: php html regex security

关于sql注入等,我已经阅读了有关安全问题的内容。

我不太熟悉输入字段中的安全漏洞。

我目前有一个接受输入的表单(通过正则表达式验证),例如电子邮件验证将如下:

if(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(document.getElementById(idName).value)){
    return true;
}else{
    return false;
}

这些值未连接到数据库,仅用于php脚本。我需要注意哪些安全漏洞?或者通过使用正则表达式验证我可以安全地抵御漏洞?

非常感谢任何信息,

谢谢你, 人

1 个答案:

答案 0 :(得分:5)

是。如果您有兴趣在服务器端拥有有效的电子邮件(至少对您的正则表达式有效),您绝对不应该依赖客户端验证通过javascript正则表达式。想象一下,有人将客户端代码更改为以下内容(只有一个选项,数千:)):

if(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(document.getElementById(idName).value)){
    return true;
}else{
    // CHANGED:
    return true;
}

并且通常回答你的问题:我认为在几乎所有使用客户端在PHP代码中发送输入的情况下,你需要一种输入过滤/清理,但你不能真正概括这个任务。这就是为什么没有通常有效的sanitize()函数,因为它总是取决于你如何在服务器端使用输入。

在你的情况下,一种方法可能是通过php再次针对相同的正则表达式验证输入,或者将php的filter_var()与FILTER_VALIDATE_EMAIL过滤器结合使用

<强>更新

我刚刚再次找到一篇关于输入验证的非常好的文章,这对我有很大帮助:Input validation