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

时间:2015-02-04 14:58:36

标签: php security getjson

我正在使用此函数和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_province.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_province.php。 .ttp://blabla.net/get_province.php?id = 1并且可以看到结果。如何防止单独访问php文件?

感谢。

1 个答案:

答案 0 :(得分:-2)

方法1:
容易欺骗,但很容易设置。如果你只有页面调用它,它会工作得最好,但如果你有多个,你可以改变它来检查一系列有效的引用。此外,在一些不会被发送的用户代理中,因此也不是很好。只需将这样的内容添加到您的provinces.php:

的顶部
<?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: 在您的请求页面上创建一个唯一的一个使用代码,并使用ajax请求发送它。好的,非常难以欺骗 - 您也可以将其与方法2结合使用,以确保经过验证的用户也无法通过浏览器网址进入。