漏洞与MySQL错误

时间:2011-12-28 03:13:19

标签: php security sql-injection

我不了解PHP安全性,但是如果我在'方法input中向POST添加form

我收到以下消息:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /usr/local/www/login.php

这是SQL注入吗?如果是这样,“黑客”如何滥用它?

2 个答案:

答案 0 :(得分:4)

这意味着您很容易受到SQL注入攻击,并且您的代码没有对错误进行足够的检查。

绝对准系统的“安全”代码将是:

<?php
... connect to db ...
$stringval = mysql_real_escape_string($_GET['param']);
$sql = "SELECT somefield FROM sometable WHERE otherfield='$stringval'";
$result = mysql_query($sql) or die(mysql_error());

更好的是停止使用mysql函数并切换到PDO和参数化查询。他们会自动为您处理注射问题。

错误消息的根本原因是您的查询导致语法错误。当查询完全失败时,mysql_query()返回一个布尔值为FALSE的值,而不是语句句柄。

由于您缺少任何类型的错误检查,因此您盲目地将该布尔值设为false并将其传递给fetch函数,该函数正确地抱怨您没有提供结果句柄。

答案 1 :(得分:0)

在将任何用户输入传递给mysql之前,您应该将其转义。在将函数添加到查询之前,使用PHP函数mysql_real_escape_string()来转义任何用户输入。以下是mysql_real_escape_string()

的PHP手册的链接

更新:是的,其他人对使用预准备语句或mysqli的看法比使用mysql扩展要好得多。

以下是MySQL注入的一些链接,我发现: