3

我正在使用 ajax 调用来查询数据库。我想将复杂的 sql 查询作为 ajax 数据的一部分传递。这是我应该这样做的方式吗?

var myQuery = 'select * from table....';        

$.ajax({
    type: "GET",
    url: 'jsonQuery.php',
    dataType: 'json',
    data: {keyvalue: 2416, q: myQuery},
    success: function(pieData) {
        //do something with the response        
    }

});
4

3 回答 3

4

是的,有更好的方法。将查询保留在.php页面上并发送一个帖子类型,告诉您使用哪一个。

例子:

data: {keyvalue: 2416, q: 2},

然后,您获取对应于数字 2 的查询并使用它!无需传递 SQL!

于 2013-02-12T16:28:42.277 回答
1

正如其他人所说,绝对不要在 AJAX 调用中直接发送 SQL。黑客可以轻松编写自己的 SQL 查询来执行他们想要在您的数据库上执行的任何代码。Insead,您可以通过 POST 传递您想要过滤的几个不同字段值(例如,“name”值或“key”或“age_range”)。然后,在接收端设置 PHP 以了解何时使用这些值;如果存在键,则将其用作标识符并使​​用查询 X。如果不存在键,则检查名称或其他值以执行对正确行的搜索,并将它们插入查询 Y。

正如 IngodItrust 所说,您还可以发送一个 POST 值来指定要使用的查询,即

q: 'LongerQuery'

然后在接收 PHP 中,有几个 IF 或 CASE 语句,它们根据存在的 Q 值准备不同的查询。

我的网站有一个图表生成器,用户可以在其中更改 X 轴和 Y 轴上的数据设置、数据是否分成不同的系列以及如果用户只想查看数据池应如何过滤特定的人口统计。当用户单击“生成”按钮时,这些设置通过 AJAX/POST 发送。接收 PHP 页面基于这 20 个输入构建图表数据查询;根据用户选择的设置,生成的查询可能看起来完全不同。我这样描述是为了说明 AJAX 可用于构建一些极其灵活和用户响应的查询,而不会产生安全风险。

于 2013-02-12T16:53:45.757 回答
0

如果我理解你的意思,你实际上不应该直接将任何 SQL 传递给 jsonQuery.php。这样做会使您面临 SQL 注入攻击。见http://bobby-tables.com/只是谷歌这个词。

相反,将参数传递给您的脚本,例如 jsonQuery.php?do=SEARCH&itemID=12&type=RED_ONES 并使用这些参数在 jsonQuery.php 中创建您的查询。虽然之前检查每个预期值..

于 2013-02-12T16:31:39.800 回答