为客户端显示网站MySQL表的名称是否安全?

Abd*_*ziz 2 javascript php database security jquery

我目前正在创建一个基于jQuery验证器插件的表单验证脚本.因此,简单的配置变得简单,如最小长度,最大长度,所需等等.
之后,我决定检查来自客户端的用户名/电子邮件的可用性,所以我不得不使用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;
        });
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Joe*_*Joe 8

这是糟糕的设计实践,因为您应该将数据库模式与客户端视图代码分离(如果要更改数据库模式,该怎么办).

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

投入额外的工作并创建一个不需要公开表名的正确PHP API.

  • 您可以将列的名称传递给PHP(它们不必是实际名称),然后根据字符串的值使用switch语句来表现不同. (2认同)