【问题标题】:How to prevent SQL injection of $_POST e-mail field using PHP 4如何使用 PHP 4 防止 $_POST 电子邮件字段的 SQL 注入
【发布时间】:2012-02-14 16:13:54
【问题描述】:

如果我能够使用 PHP 5,这会更容易一些吗?不幸的是,这不是一个可行的选择?

我已经在使用来自this stackoverflow thread 的 RFC 2822 来验证电子邮件格式是否有效,当然这是在表单页面上使用 JS,这不是最佳做法。

我会在保存之前再次验证它是否符合这种格式,但我想知道是否应该使用任何方法来帮助防止 SQL 注入?

【问题讨论】:

  • "不是最佳做法" == "对蓄意攻击完全没用"
  • 不确定你的意思 - PHP 4 中的 SQL 注入防护与 PHP 5 中的相同。您的意思是电子邮件 header 注入吗?
  • 停止。现在。 如果您的主机不允许您访问 PHP 5,您需要 DROP EVERYTHING 并立即切换主机。

标签: php mysql sql-injection php4


【解决方案1】:

错误的方式 - “永远不要相信用户输入”!

首先确定数据是你想要的格式,然后查询数据库。 因此,首先,检查 $_POST[email_address] 是否采用有效的电子邮件格式,例如用正则表达式。只有当它是有效的电子邮件格式时,您才查询数据库。

电子邮件正则表达式 (PHP) 代码:

<?php
$email = "test@test.com";

if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
  echo "Email is valid.";
}
else {

  echo "Email in invalid.";
}
?>

【讨论】:

  • 好的,刚才读到了,你检查了有效的格式。那么你怎么期望数据不是 EMAIL 呢?
  • 当然,验证格式是个好主意,但是对于来自用户的任何内容,我总是建议使用准备好的语句(这显然在 PHP 4 中不可用,因此为什么 rdlowrey 的评论得到了这么多的赞成票),或者至少使用mysql_real_escape_string() 除了您可能正在使用的任何类型的正则表达式检查来逃避它。
【解决方案2】:

在验证电子邮件后,在输入上使用 mysql_real_escape_string(),您应该在所有进入数据库的输入上使用该函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多