我对PHP的安全性一无所知,但是如果我在我的POST方法form中添加一个'到input。
我收到以下消息:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /usr/local/www/login.php这是SQL注入吗?如果是这样,它怎么会被“黑客”滥用呢?
发布于 2011-12-28 11:16:26
这意味着您很容易受到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函数,该函数理所当然地抱怨您没有提供结果句柄。
发布于 2011-12-28 11:15:41
您应该在将任何用户输入传递给mysql之前对其进行转义。在将任何用户输入添加到查询之前,使用PHP函数mysql_real_escape_string()对其进行转义。这是mysql_real_escape_string()的PHP手册的链接
mysqli :是的,其他人所说的使用预准备语句或比使用mysqli要好得多。
下面是我找到的一些关于MySQL注入的链接:
https://stackoverflow.com/questions/8651454
复制相似问题