2

如何验证用户是否使用 XMLHttpRequest 向 PHP 发布了一些数据?

这是最好的方法吗?如果没有,我该怎么做?

我有以下代码

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
    // PROBABLY AJAX REQUEST
}

我的问题是,我如何验证php://input存在且不为空?我认为以下代码可以完成工作,但需要知道这是否是正确的方法:

if(file_get_contents("php://input") == '') {
    // HAVE NOT POSTED
} else {
    // POSTED
}
4

2 回答 2

4

将自定义标头设置为 AJAX 函数的一部分,并检查服务器端代码中是否存在该标头。

也许最好的方法是在服务器端生成一个密钥,将它传递给包含 AJAX 调用的客户端代码,然后让 AJAX 将它发送回服务器并验证它是一个有效的密钥。这是防止有人伪造 AJAX 请求的最有效方法。


要检查php://input存在且不为空,请使用以下命令:

$phpinput = file_get_contents("php://input");
// From the docs: "Note: A stream opened with php://input can only be read once"
if( !$phpinput) {
    // phpinput is empty
}
于 2012-04-20T22:00:25.200 回答
2

您不能 100% 保证能够确定是否使用XMLHttpRequest. 您可以检查_SERVER['HTTP_X_REQUESTED_WITH'],但不保证在您需要时设置或不设置时不设置。不过,你可以试一试。

于 2012-04-20T21:57:24.393 回答