向客户端显示网站 MySQL 表的名称是不是安全? [复制]

Posted

技术标签:

【中文标题】向客户端显示网站 MySQL 表的名称是不是安全? [复制]【英文标题】:Is it safe to reveal the name of the website's MySQL tables for the client side? [duplicate]向客户端显示网站 MySQL 表的名称是否安全? [复制] 【发布时间】:2012-07-03 20:32:35 【问题描述】:

我目前正在创建一个基于jQuery validator plugin 的表单验证脚本。因此,简单的配置变得很容易,例如最小长度、最大长度、必需等。 之后,我决定从客户端检查用户名/电子邮件的可用性,所以我不得不使用remote 选项,这是我在创建规则数组时必须指定的选项。因此,在创建规则时,我必须将数据发送到 php 脚本并检查输入字段的可用性。

但由于我要检查多个输入字段的可用性,我创建了一个函数(在客户端)为每个字段重复使用它,并且该函数需要输入字段的 ID 和 mysql 表的名称,为了清楚起见,这是功能:

注意事项: 1.check_input 是一个php脚本,它将获取输入字段的值和要检查的表,它会返回一个json编码的布尔值,如果表中没有匹配则为true,否则为false。

function check_input(input, table)

        $.ajax(
            type:"POST",
            url:site_url+"site/check_input",
            data:
                input:input,
                table:table,
            
            
            
        ).done(function(resp)
            var is_unique = JSON.parse(resp);
            return is_unique;
        );
    

并且将通过将remote 选项设置为check_input($('#field').val(), 'table.column'); 来调用此函数。

所以,如您所见,我必须从客户端指定我的 MySQL 表,并且每个用户(好用户和坏用户)都可以看到这一点,这被认为是不安全还是不好的做法? 如果不是,检查可用性的合适方法是什么?

【问题讨论】:

【参考方案1】:

这是一种糟糕的设计实践,因为您应该将数据库架构与客户端视图代码分离(如果您想更改数据库架构怎么办)。

这是一种糟糕的安全做法,因为看起来您正在使用字符串来构建 SQL 查询。如果您不了解 SQL 注入攻击,请了解它们。这是一个经典案例。

进行额外的工作并创建一个不需要公开表名的适当 PHP API。

【讨论】:

谢谢,我想我会做额外的工作,但我没有创建 API 的经验,所以我想知道它在理论上是如何工作的?

以上是关于向客户端显示网站 MySQL 表的名称是不是安全? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

通过从下拉列表中选择字段名称来显示 mysql 表的字段数据

为用户分配一个提交到mysql表的唯一用户ID [关闭]

关于mysql的内部联结

在 javascript 中公开 MySQL 表名称是不是存在安全风险?

MySQL-数据库和表的基本操作

国家下拉列表将 ID 而不是名称(字符串)插入数据库(mysql)