Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问RedQueryBuilder中的请求结构_Javascript_Sql_Redquerybuilder - Fatal编程技术网

Javascript 访问RedQueryBuilder中的请求结构

Javascript 访问RedQueryBuilder中的请求结构,javascript,sql,redquerybuilder,Javascript,Sql,Redquerybuilder,允许访问查询树的api是否不允许访问完成的sql? 我想写一个安全的方法来接收来自客户端的SQL请求,形成服务器上的最终SQL。 例如,客户端可以发送: { op: "AND", left: { op: "=", left: "name", right: "Bob" }, right: { op: "<", left: "time", right: "130000

允许访问查询树的api是否不允许访问完成的sql? 我想写一个安全的方法来接收来自客户端的SQL请求,形成服务器上的最终SQL。 例如,客户端可以发送:

{
    op: "AND",
    left: {
        op: "=",
        left: "name",
        right: "Bob"
    },
    right: {
        op: "<",
        left: "time",
        right: "1300000000" // now() timestamp
    }
} 
{
作品:“和”,
左:{
op:“=”,
左:“姓名”,
右:“鲍勃”
},
对:{
op:“恐怕不行

在您的示例中,如果“now()”是SQL片段,您仍然会有安全问题吗

我建议你看看你的数据库给了你什么选择,让你完全不信任SQL。例如,非常低功耗的用户,只选择视图

或者重新解析SQL以检查其内容(这似乎是穷人版的使用数据库约束SQL)

也许将SQL添加为标记?可能是允许不受信任的SQL攻击您的数据库的宗教战争


另一个担忧是防止DOS,因此数据库可能也是进行资源限制的最佳位置。例如,客户端发送(以任何格式)可怕的笛卡尔连接。

最后,我使用客户端的SQL解析器构建条件树,并像json一样发送到服务器

这是我的简化管理界面:


不,“now()”片段是唯一的坏例子,我修正了它。你说的“SQL作为标记”是什么意思?我计划只使用WHERE请求部分。所以我不担心危险连接等。我的主题区域只包括对单个表的请求:“SQL”“我认为stackoverflow上的SQL/RDBMS专家可能最适合评论使用任意SQL的智慧/实用性。Re:“WHERE part”是否可以在服务器端使用SQL解析器?这样您就可以使用标准格式(而不是新发明)。然后你可以/应该得到一个对象树来处理和构造安全的SQL? in a nutshell: 1) ReQueryBulder generate SQL request (string) 2) SQL Parser create SQL request structure 3) My code convert SQL Parser structure to simple json (as stated above) 4) send json to the server
include ConditionsBuilder
cond = JSON.parse(request.params['cond']) # conditions like json string
condTree = self.parse_sql_conditions_from_json(cond) # conditions like btree structure

# perform some conditions checks, for example, add additional conditions
permission_conds = And[ GtEq['permissions', 12], Eq['is_admin', 1] ]
condTree = And[condTree, permission_conds]


conditions = self.build_sql_conditions((Time.new - 90.days).to_i, Time.new.to_i, condTree)
# handle sql request: "SELECT * FROM tablename WHERE " + conditions.to_s