如何验证用户是否已使用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
}
答案 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']
,但不保证在您需要时设置或不设置此设置。不过,你可以尝试一下。