【发布时间】:2019-02-28 16:23:15
【问题描述】:
所以,我有这个工作代码可以单击一个链接,以在输入文本框中的另一页上显示数据库的一行的详细信息。:
<?php
foreach ($allCentrifuge as $list) {
$id = $list['id'];
?>
<tr>
<td><?php echo $list['experiment'] ?></td>
<td><?php echo $list['project_name'] ?></td>
<td><?php echo $list['project_date'] ?></td>
<td><a href="../Views/user_centrifuge.php?id=<?php echo $list['id']?>">Details</a></td>
</tr>
<?php
}
?>
这个函数可以获取这些细节:
public function fetchCentrifuge()
{
$uid = $_GET['id'];
try {
$stmt = $this->dbconn->prepare("SELECT * FROM centrifuge WHERE id = ?");
$stmt->execute(array($uid));
return $stmt->fetchAll();
}
因此,从我阅读的所有主题中可以明显看出,这对 SQL 注入很危险。但是如何将这段代码与准备好的语句一起使用?我似乎无法让它与 id 占位符一起使用。
【问题讨论】:
-
显然这很危险 不,不是!您已经决定使用 parpared、parameterized 和 bound 查询。也许你应该再读一遍所有这些主题
-
@RiggsFolly 好的,很抱歉。我想当你点击一个链接并且 URL 看起来像这样时: ...Views/user_centrifuge.php?id=26 ,我现在得到的,它被认为是危险的。
-
如果你在做
"SELECT * FROM centrifuge WHERE id = $id"会是这样,但如果你正在准备和绑定就不会 -
出于 RiggsFolly 提到的原因,它不是。正如一些答案中提到的,您可以做一些额外的检查以确保它是一个整数,如果这是您所期望的。
-
老实说,您应该对从您无法控制的任何地方实际发送给您的内容做一些健全性检查,因此转换为 int 是个好主意