我不了解PHP安全性,但是如果我在'
方法input
中向POST
添加form
。
我收到以下消息:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /usr/local/www/login.php
这是SQL注入吗?如果是这样,“黑客”如何滥用它?
答案 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()
更新:是的,其他人对使用预准备语句或mysqli的看法比使用mysql扩展要好得多。
以下是MySQL注入的一些链接,我发现: