Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Jquery getJSON填充选择菜单-安全性_Php_Security_Getjson - Fatal编程技术网

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

Php Jquery getJSON填充选择菜单-安全性,php,security,getjson,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) {

我将此函数与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: 很容易,但很容易设置。如果您只有页面调用它,那么它将工作得最好,但是如果您有多个页面调用,您可以将其更改为通过一系列有效的引用进行检查。另外,在一些用户代理中,这些代理不会被发送,因此出于这个原因,它也不是很好。只需将类似的内容添加到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结合使用,以确保已验证的用户也无法通过浏览器url条目进行访问。

您不能。如果用户需要通过AJAX访问它,那么可以通过浏览器访问它,而您不能。这是一个网页。没有可靠的方法来检测对该url的点击是来自您的ajax代码,还是来自直接戳它的人。这有什么关系?省名并不是你需要担心的事情。除此之外,您还需要来回传递会话令牌,以验证最终用户以及会话令牌是否来自应用程序中的正确位置。如果可能的话,我想学习一些方法。例如,我将对不同的级联下拉列表使用此方法;来自公司的用户列表。。用户可以使用公司id运行php,并可以查看用户列表@MikeBrantHTTP_REFERER不是必需的标头,可能会为实际用户禁用ajax。所有方法都很容易被欺骗,您想要阻止AJAX请求的唯一原因是来自脚本编写者。普通用户/搜索机器人无论如何都不会访问它。正如我所说的,1很容易被欺骗,方法2很有保证,方法3是第二好的。1的问题不在于它是欺骗,而在于不是每个浏览器/用户都发送引用者。如果有效用户未发送,则您的站点将无法工作。2不能保证什么。如果我能看到经过验证的AJAX请求,那么我就可以直接访问内容。3和2有同样的问题