我将此函数与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条目访问。