如何通过$ .ajax安全地发送附加数据/参数进行过滤?

时间:2017-03-29 18:15:30

标签: javascript php json ajax mysqli

如何通过$ .ajax安全地发送其他数据/参数进行过滤?

我正在尝试通过$ .ajax发送额外的数据/参数,以便对返回的json进行额外过滤。发送单个术语时,我的设置如下:

javascript:

{"type":"record","name":"MyRecodr","namespace":"org.demo","fields":[{"name":"timestamp","type":{"type":"long","logicalType":"timestamp-millis"}}]}

控制台:

$.ajax({
  url: "/source.php",
  dataType: "json",
  data: {
    term: request.term
  },

PHP:

GET .../source.php?term=valueA1

现在,在添加/发送其他数据/参数(如果可用)时,我的设置如下所示:

$term = trim(strip_tags($_GET['term'])); 
$term = preg_replace('/\s+/', ' ', $term);

$a_json = array();
$a_json_row = array();

$a_json_invalid = array(array("id" => "#", "value" => $term, "label" => "Only letters and digits are permitted..."));
$json_invalid = json_encode($a_json_invalid);

if(preg_match("/[^\040\pL\pN_-]/u", $term)) {
  print $json_invalid;
  exit;
}

if ($data = $mysqli->query("SELECT * FROM accounts WHERE name LIKE '%$term%' OR code LIKE '%$term%'")) {
while($row = mysqli_fetch_array($data)) {
    ...
}
}
$('#input-newsearch-2')的

.val()可以是:

$.ajax({
  url: "/source.php",
  dataType: "json",
  data: {
    term: request.term,
    tags: $('#input-newsearch-2').val()
  },

......等等。

控制台:

$('#input-newsearch-2').val() = 
$('#input-newsearch-2').val() = valueA1
$('#input-newsearch-2').val() = valueA1,valueA2
$('#input-newsearch-2').val() = valueA1,valueA2,valueA3

是否可以发送这样的逗号分隔数组,php应该如何使用标签进行额外的过滤(AND WHERE)?

编辑:这不是参考答案的公开,因为我发送一个可能的数组作为第二个参数。它也没有回答锄头然后在php中获取它以及如何在查询中使用它

1 个答案:

答案 0 :(得分:0)

如果您希望它真正安全,您需要将数据放在有效负载内而不是URL或查询字符串中。

请参阅此相关问题:Send JSON data with jQuery