Php 在AngularJS中创建自己的查询生成器(如Symfony)安全吗
我在发送表名的控制器内进行查询,条件如Php 在AngularJS中创建自己的查询生成器(如Symfony)安全吗,php,angularjs,sql-injection,Php,Angularjs,Sql Injection,我在发送表名的控制器内进行查询,条件如WHERE子句等。。在我的服务中创建查询 studentController.js let student_ctr = this; let em = default_service.query(); em.columns('*') em.from('user_accounts', 'o') em.innerJoin('user_accounts_credentials', 'uac', 'uac.user_id = o.uuid') em.getResul
WHERE
子句等。。在我的服务中创建查询
studentController.js
let student_ctr = this;
let em = default_service.query();
em.columns('*')
em.from('user_accounts', 'o')
em.innerJoin('user_accounts_credentials', 'uac', 'uac.user_id = o.uuid')
em.getResult({
controller: student_ctr,
variable: 'get_user_account'
});
console.log(student_ctr.get_user_account);
let path = 'app/base/model/defaultModel?_='; // Sends all Common Query
return {
query: () => {
let sql = ' SELECT ';
let columns = a => string += a;
let from = (a, b) => string += ' FROM ' + a + ' AS ' + b;
let leftJoin = (a, b, c) => string += ' LEFT JOIN ' + a + ' AS ' + b + ' ON ' + c;
let getResult = o => {
$http({
url: path + 'query',
method: "POST",
data: { q: string } // Sends the SQL string to the defaultModel.php
})
.then(response => {
let name= o.variable;
let model = $parse(name);
model.assign(o.controller, response.message); // I am going to create a scope variable.
})
}
return { columns, from, leftJoin, getResult }
}
}
注意:在em.getResult()
中,我发送了控制器student\u ctr
和一个变量get\u user\u account
来创建一个范围变量(您可以在defaultService中看到我是如何将其转换为范围变量的)。可以传递控制器的整个对象吗?只是出于好奇
defaultService.js
let student_ctr = this;
let em = default_service.query();
em.columns('*')
em.from('user_accounts', 'o')
em.innerJoin('user_accounts_credentials', 'uac', 'uac.user_id = o.uuid')
em.getResult({
controller: student_ctr,
variable: 'get_user_account'
});
console.log(student_ctr.get_user_account);
let path = 'app/base/model/defaultModel?_='; // Sends all Common Query
return {
query: () => {
let sql = ' SELECT ';
let columns = a => string += a;
let from = (a, b) => string += ' FROM ' + a + ' AS ' + b;
let leftJoin = (a, b, c) => string += ' LEFT JOIN ' + a + ' AS ' + b + ' ON ' + c;
let getResult = o => {
$http({
url: path + 'query',
method: "POST",
data: { q: string } // Sends the SQL string to the defaultModel.php
})
.then(response => {
let name= o.variable;
let model = $parse(name);
model.assign(o.controller, response.message); // I am going to create a scope variable.
})
}
return { columns, from, leftJoin, getResult }
}
}
通过所有这些,我创建了一个SQL字符串SELECT*FROM user\u accounts AS o internal JOIN user\u accounts\u credentials AS uac ON uac.user\u id=o.uuid
我觉得这很有帮助,快速,整洁。虽然在我的DOM的Network>头中,用户实际上可以看到defaultModel.php中传递的字符串
在经历了这么多的安逸之后,我只是想知道它是否安全
更新
我在问,如果有黑客或其他可能通过暴露传递给defaultModel.php的DOM>NETWORK>HEADERS中的字符串来操纵我的数据库是否安全,那么您会问直接将SQL传递给php是否可以?如果您不介意让客户机控制您的数据库,那么一定要这样做。撇开玩笑不谈,这听起来是一个非常糟糕的主意,因为您不再控制执行什么查询了,这是一个选择吗?这是一份放弃声明吗?服务器不知道,只会执行所有操作。我想这是一个快速选择。尽管如此,我计划不仅创建SELECT语句,还创建INSERT、UPDATE和DELETE语句。我会尽可能地让它充满活力。插入where子句、order by等。。我想问的是,如果有黑客或其他东西仅仅通过暴露传递给PHPNo的DOM>NETWORK>头中的字符串就可以操纵我的数据库,那么这是否安全?如果有人注意到你正在向该端点传递SQL查询,然后他们打开Postman并提交自己的查询,那么这就不安全了。如果是客户端,好吗?或者,如果我只是传递部分参数并在php中创建字符串呢?没有办法从前端隐藏发布的url。