PHP / ajax - 阻止用户提交带有get变量的url,但在ajax调用中除外

时间:2014-03-16 00:39:07

标签: javascript php jquery ajax

您好我有一个jquery函数,它使用ajax调用将信息发送到php页面。它使用get方法发送此信息。我对此的关注是,如果用户直接进入php页面并在url中输入一些get变量,该怎么办?虽然php脚本没有处理敏感数据,但我仍然希望ajax调用能够与脚本而不是用户进行交互(通过在浏览器中输入url)。怎么办呢?

js code

$.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 code

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

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

2 个答案:

答案 0 :(得分:1)

大多数ajax框架(比如jQuery)都在发送HTTP_X_REQUESTED_WITH标题。已经描述了如何检索它的Here值。

我认为不建议使用标头值来保护您的脚本,因为您可以操作请求标头(例如curl)。您使用哪种方法,GETPOSTPUTDELETE并不重要,您的服务器端api必须是安全的。如果您想阻止对该网址的重复调用,请查看验证码服务或将uid添加到仅有效一次的网址。

答案 1 :(得分:0)

对于POST或GET请求,如果您在数据库中进行插入,则必须执行   - 安全表格   - 安全发布数据

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

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

JS

    $.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);
        }
    });

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

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