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 函数的主要内容,如果未能解决你的问题,请参考以下文章
php intval()函数漏洞,is_numeric() 漏洞,绕过回文判断
是否有完美的方法来检查 isset 和 is_numeric 1 条件