DB_PREFIX和针对SQL注入和其他攻击的安全性

时间:2017-12-30 10:50:32

标签: php mysql

也许是一个愚蠢的问题,但只是好奇。无法在搜索中找到任何内容。

所以我知道DB_PREFIX用于区分数据库中的不同表,这些表可能来自不同的"源" as pointed out here.

我正在使用DB_PREFIX,它在config.php中被声明为常量 随着我继续学习PHP的过程,这是我第一次使用DB_PREFIX(修改别人的脚本)

所以我只是好奇,请考虑以下简单陈述。

$sql = "SELECT gameID from ". DB_PREFIX . "schedule WHERE weekNum = :weekNum AND homeID = :homeID";
    $stmnt = $db->prepare($sql);
    $stmnt->bindValue(':weekNum', $week);
    $stmnt->bindValue(':homeID', $teamName );
    $stmnt->execute();
    if ($stmnt->rowCount() > 0) {
        $IDs = $stmnt->fetchAll();
        foreach ($IDs as $ID){
            $gameID = $ID['gameID'];
        }
        //echo $gameID;
        return $gameID;
    }
    else {
        die('Error getting game id: ');
    }

的config.php

define('DB_PREFIX', 'bru_');
  1. DB_PREFIX是否提供了一些"额外的"安全层?
  2. 使用DB_PREFIX是不错的做法?

1 个答案:

答案 0 :(得分:2)

在所有应用程序表中都有自定义前缀可以用于两个目的:

  • 与其他应用共享同一个数据库。这只是真正廉价的托管服务才有意义 - 而且在2017年意味着真正的低成本服务。

  • 拥有多租户应用程序(单个应用程序将其数据拆分为同一个表集的多个副本)。这类应用往往是维护的噩梦。

它不可能添加任何额外的安全性,因为它没有尝试。它根本不是安全功能。事实上,从安全的角度来看,可以说它实际上可以增加风险。如果您与其他任意应用程序共享存储,您很可能也会在完整数据库上使用相同的读写权限共享同一个MySQL用户。在这种情况下,另一个应用程序可以有意或无意地轻易消除您的表格。

关于良好实践部分......这总是相当主观的。我的个人意见是,它提供了一个可疑的好处(共享一个数据库就像分享洗澡水,只有你生活在沙漠中才有意义),这使得编写SQL代码更加烦人。例如,您不能再在PHP代码和MySQL客户端之间复制和粘贴,如果您使用识别PHP字符串中的SQL的IDE,您将无法获得正确的代码智能。