Jquery getJSON填充选择菜单-安全性


Jquery getJSON populate select menu - security

我将此函数与getJSON一起用于填充选择菜单。

$.getJSON('get_province.php', {id:$('#customer_city').val()}, function(data) {
      var select = document.getElementById("customer_province");
      $('option', select).remove();
      $.each(data, function(index, array) {
        select.add(new Option(array['province_name']));
      });
      $("#customer_province").select2("val", "");
    });

这是get_provice.php

$db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password_conn);
$rows = array();
if (isset($_GET['id'])) {
$stmt = $db->prepare("SELECT province_name FROM db WHERE city_code= ? ORDER BY province_name");
$stmt->execute(array($_GET['id']));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); }
echo json_encode($rows);

它起作用了。但是用户可以像那样单独运行get_provice.php。ttp://blabla.net/get_province.php?id=1并且可以看到结果。如何防止单独访问php文件?

谢谢。

方法1:
很容易伪造,但很容易设置。如果你只有一个页面调用它,效果会更好,但如果你有多个页面,你可以更改它,通过一个有效的referrer数组进行检查。此外,在一些不会发送的用户代理中,因此也不太好。只需在您的provisions.hp:的顶部添加这样的内容

<?php
  if ($_SERVER['HTTP_REFERER'] !== '%good referer address%') {
    echo "</p>some sort of warning if you want</p>";
    header("HTTP/1.1 403 Unauthorized");
    exit;
  }

方法2:使用会话处理和已验证的用户。这是一个相当重要的项目,但它将非常坚固,与您的用户系统安全性一样难以伪造。

方法3:在请求页面上创建一个唯一的one-use代码,并将其与ajax请求一起发送。很好,很难伪造-你也可以将其与方法2结合使用,以确保经过验证的用户也不能通过浏览器url条目访问。