【问题标题】:How do obfuscate JSON response when dealing with a DB query?处理数据库查询时如何混淆 JSON 响应?
【发布时间】:2012-10-24 04:40:15
【问题描述】:
[
 {
  "businesscards_id":"12",
  "X_SIZE":"1.75x3",
  "X_PAPER":"14ptGlossCoatedCoverwithUV(C2S)",
  "X_COLOR":"1002",
  "X_QTY":"250",
  "O_RC":"NO",
  "F_PRICE":"12490",
  "UPS_GROUND":"12000",
  "UPS_TWODAY":"24000",
  "UPS_OVERNIGHT":"36000"
 }
]

此 JSON 编码响应可在 Chrome 的控制台中看到。该数组是从数据库查询返回的。它显示了我的表列名。出于安全原因,我不想显示我的表列名。 如何对这个 JSON 对象进行模糊处理或散列处理和/或编码或动态重写以保持我的表列名称的私密性?

【问题讨论】:

  • 如果您的安全性取决于您的字段名称是否保密,那么坦率地说,您的安全性很糟糕。您认为银行会担心使用明显的“account_number”绰号将您的...帐号存储在他们的客户/用户表中吗?
  • 我只是建议 - 如果您不希望知道您的列名,那么就不要发送它们。如果您正在使用将列名和值配对的通用提取循环,则需要对其进行更改,以便手动设置属性名称及其值。
  • 更改 JSON 中的字段名称真的很难弄清楚吗?
  • 如果它真的很重要,您可以完全放弃 JSON 中的对象字面量,并假设它们总是以相同的顺序出现,只发回一个简单的值数组并且可以通过数字索引访问。不过,这更令人困惑,也需要更多的工作。这更好。

标签: php jquery json codeigniter


【解决方案1】:

不要对您的 JSON 做任何事情。

如果您不希望列名可见,请不要使用列名。使用新键创建一个新数组以使用 JSON 发送,然后将该数组更改回包含您的列名的数组。

但人们看到它们确实不应该成为问题。没有人可以访问您的数据库,因此让人们看到列名不是问题。

【讨论】:

  • 如果有人能够进行 SQL 注入,他们可以通过 SHOW COLUMNS 获取所有列。
【解决方案2】:

这实际上取决于您希望在收到记录后如何使用它。一种策略可能是只返回一个值数组,丢弃键。然后在您的代码中,使用您在处理记录时需要的数组值的私人知识。比如:

var result=[];
Object.keys(record).forEach(function(key){result.push(record[key]);});

然后在您的代码中,使用数组索引来访问值。

【讨论】:

    【解决方案3】:

    SQL语句:

    SELECT `col_name` AS 'something_else'
    

    但是,正如其他人所说,不要为了安全而这样做。这是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 2011-06-26
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多