第二阶段SQL注入

时间:2016-08-18 03:19:09

标签: php mysql

我有一个发送到外部网站的用户表单,该网站的回复包含一个唯一的代码(例如" a87ju89y")。该代码对我很重要,因此,使用预处理语句将其输入到我的数据库中。

在后端我有一个cronjob每分钟运行一个php脚本,查询数据库以查看是否有这样的新代码:

$con = mysqli_connect($servername, $username, $password,  $database);
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$results = mysqli_query($con, "SELECT user FROM stack ORDER BY ID");
$cronresults = mysqli_query($con, "SELECT run FROM kook ORDER BY ID");
$row = mysqli_fetch_assoc($results);
$cron = mysqli_fetch_assoc($cronresults);
$row2 = $row['user'];
$cron2 = $cron['kook'];

我的问题是,我是否需要一个准备好的语句来简单地提取信息并阻止某种SQL注入?如果我这样做,我会怎么做呢?

2 个答案:

答案 0 :(得分:3)

您在这里不需要准备好的声明,因为您没有将任何数据传递到查询中。准备好的语句将查询分解为查询本身(带占位符)和要处理的数据。这样就不会混淆什么是数据和什么是查询。

选择表格中的所有行不需要数据。

答案 1 :(得分:1)

Prepared语句仅在需要将值插入查询时才有用。这通常是在您拥有包含要搜索的值的WHERE子句时。在您的情况下,两个查询都没有任何移动部分,因此没有任何准备好的语句可以为您做。

在旁注中,您可以做一些事情来改进您的脚本:

  • 将两个查询合并为一个以提高效率:
  • 在获取结果
  • 之前,请始终检查查询是否已成功运行
  • 如果您只使用第一个结果
  • ,请在SQL末尾添加LIMIT 1