【问题标题】:is_numeric and isEmail functionsis_numeric 和 isEmail 函数
【发布时间】: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 工作谢谢 :)

标签: php validation isnumeric


【解决方案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'"

【讨论】:

  • 我冒昧地说明和澄清了您的攻击向量参考。
  • 我喜欢它。清晰度更高。
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2014-06-22
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
相关资源
最近更新 更多