is_numeric 和 isEmail 函数

Posted

技术标签:

【中文标题】is_numeric 和 isEmail 函数【英文标题】:is_numeric and isEmail functions 【发布时间】:2018-11-09 15:52:48 【问题描述】:

我创建字段($login),用户应使用电子邮件或电话号码注册 所以我想通过安全检查来验证

我可以同时使用两个功能吗?我尝试了以下代码,但没有成功。

if(!is_numeric || isEmail($login)) 
    $mesaj = '<div class="msg"><div class="error">Add Valid Email or Phone Number</div></div>';
else
    $db->Query("UPDATE `users` SET `login`='".$login."' WHERE `id`='".$data['id']."'");
    $mesaj = '<div class="msg"><div class="success">Success</div></div>';

有什么想法吗?

【问题讨论】:

if(!(is_numeric($login) || isEmail($login))) ? 你应该参数化那个查询。 @splash58 工作谢谢 :) 【参考方案1】:

您的代码中有错误:if(!is_numeric || isEmail($login))

您没有使用is_numeric 进行函数调用。你需要给它一个参数:is_numeric($myVar)

您的代码中还存在 SQL 注入问题。 从不连接字符串来构建查询。请改用parameterized queries。


可能的攻击媒介:

/***
 * Data input from client browser / app
 ***/
$data['id'] = "0' OR id > 0 OR id = '1";
$login = "', `password`='hacked";

"UPDATE `users` SET `login`='".$login."' WHERE `id`='".$data['id']."'"

输出 SQL:

"UPDATE `users` SET `login`='', `password`='hacked' WHERE `id`='0' OR id > 0 OR id = '1'"

【讨论】:

我冒昧地说明和澄清了您的攻击向量参考。 我喜欢它。清晰度更高。

以上是关于is_numeric 和 isEmail 函数的主要内容,如果未能解决你的问题,请参考以下文章

弱类型整数大小比较绕过

is_numeric()

php intval()函数漏洞,is_numeric() 漏洞,绕过回文判断

是否有完美的方法来检查 isset 和 is_numeric 1 条件

性能:foreach 循环中的 is_numeric() 和 is_string()

使用 is_numeric 进行表单验证