Я использую Jquery Query Builder для создания пользовательских запросов SQL. И я использую Ajax для отправки данных на сервер и получения результатов.
Но проблема в том, что этот AJAX-запрос виден через Агенты инспектора. И кто-то может легко изменить запрос.
Так что я пытаюсь выяснить способы предотвращения инъекций sql. Вот мой код Javascript:
// Define Query Option
var query_options = {
plugins: [
'bt-checkbox','sortable'
],
filters: [
{
id: 'CITY',
label: 'city',
type: 'string',
input: 'select',
multiple: true,
plugin: 'select2',
plugin_config: {
multiple: "multiple",
data: []
},
operators: ['is_not_null', 'in', 'not_in', 'not_equal'],
valueSetter: function(rule, value) {}
}
]
}
// Get 'Cities' to use it in PHP File
$.get('custom/getCities', function(q_cities) {
if (q_cities.length) {
q_cities.forEach( function(element, index) {
query_options.filters[0].plugin_config['data'].push(element['CITY']);
});
}
}, 'json'),
// Create Query
// @NOTE: This is where Sql injection can be made.
$('#btn-get').on('click', function() {
var result = $('#builder-basic').queryBuilder('getSQL');
var query = result.sql;
if (!$.isEmptyObject(result)) {
$.ajax
({
url: 'custom/customquery',
// This part is vulnerable to Sql injections.
data: { query: query },
type: 'post',
dataType: "HTML",
success: function(o)
{
if (o.length) {
console.log(o);
}
}
});
}
});
А это мой код PHP:
// Server Side PHP script
public function customquery()
{
if(isset($_POST['query'])){
$query = $_POST['query'];
}
$qry = "SELECT * FROM MYTABLE WHERE " . $query;
$result = $this->db->select($qry);
echo json_encode($result);
}
Я знаю, что есть способы предотвратить AJAX Sql инъекцию Но я
не удалось найти ответы на конкретные условия, такие как Jquery Query
Builder .
Заранее спасибо.