如何验证“php:// input”是否已设置且不为空

时间:2012-04-20 21:55:11

标签: php xmlhttprequest

如何验证用户是否已使用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
}

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

您无法100%保证能够确定是否已使用XMLHttpRequest请求脚本。您可以检查_SERVER['HTTP_X_REQUESTED_WITH'],但不保证在您需要时设置或不设置此设置。不过,你可以尝试一下。