我对SQLi没有经验,并且正在学习它,但我想问这个问题,因为我正在学习SQL注入攻击。
我使用mySQLi保留字和函数来处理我的查询并使我的数据库运行。
在阅读了这些攻击以及如何保护自己后,我想知道我是否应该使用这个库,因为我还没有看到其他人使用它。非我的讲师使用它,如果使用它是不好的做法,我可以问为什么?
以下是我的代码示例。正如您所看到的,我使用保留字和函数,如" mysqli_num_rows(),mysqli_free_result()和mysqli_close()。这个图书馆是不好的做法,为什么?谢谢
<?php
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
# Run the query, store result in a string and store number of rows returned
$result= mysqli_query($con,"select * from gameRecords") or die("Error: ".mysqli_error($con));
//echo $result;
// Return the number of rows in result set
$rowcount=mysqli_num_rows($result);
if($rowcount !=0)
{
echo("Result set has $rowcount rows.<br>");
/* fetch associative array*/
while ($row = mysqli_fetch_assoc($result)) {
?>
<tr><td>
<?php
echo $row["gameNo"]."</td>"."<td>";
echo $row["oppTeam"]."</td>"."<td>";
echo $row["date"]."</td>"."<td>";
echo $row["location"]."</td>"."<td>";
echo $row["result"]."</td>"."<td>";
echo $row["ko"]."</td>"."<td>";
echo $row["score"]."</td>"."<td>";
echo $row["fhInfo"]."</td>"."<td>";
echo $row["shInfo"]."</td>"."<td>";
?>
</td>
</tr>
<?php
}
//free result set
mysqli_free_result($result);
}
# Closes the database
mysqli_close($con);
?>
答案 0 :(得分:1)
1,您使用的是mysqli,这是正确且安全的(以安全的方式使用)。不要与不推荐使用的mysql(没有&#39; i&#39;)混淆。
那些&#39;保留&#39;你说的是功能。它们可供使用。你是以程序的方式使用它,这也是一种品味问题以及你如何构建更多的东西而不是安全问题。
您的代码没有任何问题。就你的查询而言。
$result= mysqli_query($con,"select * from gameRecords");
但是如果您在哪里使用输入来构建您的查询,则需要转向准备好的语句。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
Theres有很多关于准备好的声明的文件。我也在使用mysqli,大多数人都认为你在谈论语句时正在使用PDO,所以在寻找答案时要小心,语法相似但不完全相同。