2

我目前正在创建一个基于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;
        });
    }

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

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

4

1 回答 1

8

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

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

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

于 2012-07-03T12:02:27.717 回答