使用Ajax和标头重定向记录错误

时间:2013-01-03 07:14:55

标签: php ajax security login http-headers

如果用户在未登录时尝试在我的系统中执行某个功能,我会尝试制作一些内容,它会弹出一条消息,说他们不能这样做,因为他们没有登录。他们是然后在按下确定后发送到登录界面。

如果他们直接输入网址,我也希望它将用户重定向回登录界面,但这次没有错误信息。

我有:

$components = explode('/', $url, 3) ;

if(!isset($_SESSION['loggedin']) && $components[0] != 'access' && $components[0] != 'login')
    {

        echo json_encode('{"error": 2000, "msg": "You must be logged in to do that."}') ;
        return false ;
}

对于Ajax来说这很好,但是如果输入了url则无法工作。$ components [0]!='access'等只是在用户登录屏幕时停止执行此条件。< / p>

如果没有影响Ajax调用的标头位置,如何在用户访问禁用网址时回复错误消息,该怎么办呢?

2 个答案:

答案 0 :(得分:0)

  

如果没有影响Ajax调用的标头位置,如何在用户访问禁用网址时回复错误消息,该怎么办呢?

有多种方法可以实现这一点,让我们在这里讨论两个:

检查referer

首先,您可以检查HTTP引用,浏览器将链接到当前页面的页面的URL作为HTTP标头发送。

当用户点击表单/链接时,请查看http://foo.invalid/blah/?action=newfolder.php的此(缩短的)HTTP请求。

请求

Request URL:http://foo.invalid/blah/?action=newfolder.php
Request Method:POST

接头

Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:foo.invalid
Referer:http://foo.invalid/

您可以看到存在“Referer”字段,如果用户直接打开http://foo.invalid/blah/?action=newfolder.php,则不会有referer字段。

来源

<?php 
if (empty($_SERVER['HTTP_REFERER'])) {
    // Redirect to login (Referer empty)
} else {
    // Show JSON warning (Referer not empty)
}
?>

但是,此解决方案可靠,因为一些用户出于隐私原因禁用或伪造引用者。

添加自定义HTTP标头字段

更好的方法是发送自定义HTTP标头,请注意您只能向AJAX请求添加自定义HTTP标头。像JQuery这样的库已经为您添加了自定义标题。

来源(XMLHttpRequest

var r = new XMLHttpRequest();
r.open('get', '/blah/?action=newfolder.php');
r.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
r.send(null);

现在请求将包含自定义X-Requested-With标头,如果标头丢失,您可以通过输入URL来假设页面已打开。

<?php 
if (empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    // Redirect to login (X-Requested-With empty)
} else {
    // Show JSON warning (X-Requested-With not empty)
}
?>

答案 1 :(得分:-1)

$UserName = "username";
$PassWord = "password";

if ($_SERVER['PHP_AUTH_USER'] != $UserName || $_SERVER['PHP_AUTH_PW'] != $PassWord) {
        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.1 401 Unauthorized');
        die('Your username and password is incorrect');
                    // or you can redirect user if username or password is incorrect
                header("Location:"your redirecting url);              
} 

请使用此代码,它可能对您有帮助....

要了解有关PHP身份验证的更多信息,请参阅以下链接:

http://php.net/manual/features.http-auth.php