gpt4 book ai didi

php - DB_PREFIX 和针对 SQL 注入(inject)和其他攻击的安全性

转载 作者:可可西里 更新时间:2023-11-01 08:24:19 25 4
gpt4 key购买 nike

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

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

我正在使用在 config.php 中声明为常量的 DB_PREFIX当我继续我的 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: ');
}

配置.php

define('DB_PREFIX', 'bru_');
  1. DB_PREFIX 是否提供一些“额外”的安全层?
  2. 使用 DB_PREFIX 是好的做法吗?

最佳答案

在所有应用程序表中使用自定义前缀有两个目的:

  • 与其他应用共享同一个数据库。只有真正便宜的托管服务才有意义——在 2017 年,这意味着真正低成本的服务。

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

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

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

关于php - DB_PREFIX 和针对 SQL 注入(inject)和其他攻击的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48033207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com