我可以用这段代码入侵吗?

时间:2011-04-04 16:20:43

标签: php mysql security

我购买了一个脚本,里面有一些奇怪的代码。 我是一名PHP初学者,但对清理输入数据等事情有所了解。

这是代码:

<form action="sendpass.php" method="post" id="sendpassform">
<input type="text" name="email" />
<input type="submit" name="sendpass" value="Send" />
</form>
?>

...
if($_REQUEST['email'] != ''){
  $email = $_REQUEST['email'];
  $k = mysql_query("SELECT * FROM users WHERE email='".$email."'") or die(mysql_error());
  $result= mysql_fetch_array($k);
  ....
}

我很好奇,是否有人可以使用此表单破解网站,因为电子邮件字段只是直接传递给SQL而且有任何转义...

7 个答案:

答案 0 :(得分:7)

是。这称为SQL注入。任何用户提供的值都直接包含在SQL语句中,这是可能的。

答案 1 :(得分:7)

使用SQL注入非常容易。

答案 2 :(得分:7)

您应该使用$email = mysql_real_escape_string($_REQUEST['email']);

这应该可以防止任何SQL注入攻击。

要回答你的问题,这是可能的,但是否有任何损害取决于你对从MySQL检索到的数据做了什么(未显示)

答案 3 :(得分:4)

简短的回答是肯定的,虽然我不能通过游戏给你一个如何发生的戏剧;我没有足够的数据库结构信息知道 - 我不想知道。 :)

您可以采取一些非常简单的步骤来提高代码的安全性:

  1. $email = mysqli_real_escape_string($database_connection, $_REQUEST['email')

    这会逃避任何可能对SQL字符串产生负面影响的危险字符

  2. $email = mysqli_real_escape_string($database_connection, trim($_REQUEST['email'))

    在这一步中我们添加了trim函数,该函数取出任何白色空格 - 用于启动SQL注入攻击

  3. 如果您想了解有关SQL /编程安全性的更多信息,我建议您阅读以下书籍:

    1. Head Firs PHP&amp; MySQL(适合初学者 - 非常好)
    2. 黑客暴露的Web应用程序第3版 祝好运 随时可以提出任何问题

答案 4 :(得分:2)

这应该被列为SQL注入可能性的主要示例。当然,您需要转义$email变量。

答案 5 :(得分:1)

在SQL中使用时,$ email变量会被转义。但变量的内容可以是转义字符和其他SQL。这可能导致某人在服务器上运行任意SQL。

答案 6 :(得分:1)

这看起来像是一个sql-injection教程的例子。如果必须在数据库查询中集成用户输入,则应始终考虑以下两种安全措施。如果可能的话,两者都应该适用,以防万一:

  1. 使用预准备语句(如果您的数据库驱动程序支持此语句)
  2. 执行输入验证
  3. 如果输入合理,您应该只使用输入。验证电子邮件地址的正则表达式是这样的(取自ESAPI,企业安全API):

    ^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$