Javascript PHP/ajax-防止用户提交带有get变量的url,ajax调用除外

Javascript PHP/ajax-防止用户提交带有get变量的url,ajax调用除外,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,嗨,我有一个jquery函数,它使用ajax调用将信息发送到php页面。它使用get方法发送此信息。我担心的是,如果用户直接进入php页面并在url中输入一些get变量会怎么样。虽然php脚本没有处理敏感数据,但我仍然希望ajax调用能够与脚本交互,而不是与用户交互(通过在浏览器中输入url)。如何做到这一点 js代码 $.ajax({ type: "GET", url: "/add.php", data: 'id=' + itemid, dataType: "j

嗨,我有一个jquery函数,它使用ajax调用将信息发送到php页面。它使用get方法发送此信息。我担心的是,如果用户直接进入php页面并在url中输入一些get变量会怎么样。虽然php脚本没有处理敏感数据,但我仍然希望ajax调用能够与脚本交互,而不是与用户交互(通过在浏览器中输入url)。如何做到这一点

js代码

$.ajax({
    type: "GET",
    url: "/add.php",
    data: 'id=' + itemid,
    dataType: "json",
    success: function (data) {
        document.getElementById("name").innerHTML = data[0];
        document.getElementById("desc").innerHTML = data[1];
        document.getElementById("price").innerHTML = data[2];
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
    }
});
php代码

$output = array();
$output[0] = $itemname . " " . $_GET['id'];
$output[1] = $itemdescription;
$output[2] = $itemprice;
echo json_encode($output);
exit();

不幸的是,我不能使用POST方法,因为这与某些代码冲突。

对于POST或GET请求,如果要在数据库中插入,则必须 -将表单安全化 -将已发布数据安全化

另外,您应该考虑使用键/值数组

优先。
    $output = array(
        'id' => $_GET['id'],
        'name' => $itemname,
        'description' => $itemdescription,
        'price' => $itemprice
    );
    echo json_encode($output);
js

要使ajax查询安全,必须转义html实体,即sql注入。 要使表单安全,您可以为每个表单生成一个令牌,并在将数据发送到服务器之前对数据进行编码,客户端将无法读取您发送到服务器的数据类型

在服务器端,您可以在插入之前进行解码。

大多数ajax框架(如jQuery)都会发送带有头的
HTTP\u X\u REQUESTED\u。
已经描述了如何检索它的值


我认为不建议使用头值保护脚本,因为您可以操作请求头(例如curl)。您使用哪种方法,
GET
POST
PUT
DELETE
无关紧要,您的服务器端api必须是安全的。如果您想防止重复调用该url,请查看验证码服务或向仅有效一次的url添加UID。

您的意思相当清楚,但没有英文单词“securize”;动词只是“to secure”。可能是securise?)无论是使用GET或POST,还是AJAX或direct browser entry,您都无法阻止某人向您的服务器发出任何请求。您所能做的就是检测他们发出的请求,要么忽略它,要么以安全的方式处理它。
    $.ajax({
        type: "GET",
        url: "/add.php",
        data: 'id=' + itemid,
        dataType: "json",
        success: function ( item ) {
            document.getElementById("name").innerHTML = item.name + " " + item.id;
            document.getElementById("desc").innerHTML = item.description;
            document.getElementById("price").innerHTML = item.price;
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
        }
    });