【问题标题】:How to safely use $_GET['id'] to get details from database by selecting html table row如何通过选择 html 表行安全地使用 $_GET['id'] 从数据库中获取详细信息
【发布时间】: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 是个好主意

标签: php pdo get fetch


【解决方案1】:

看起来不错。您还可以将输入 var 转换为 INT。

(int)$_GET['id'] or intval($_GET['id'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 2017-07-19
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2017-11-06
    相关资源
    最近更新 更多