离子3 HTTP-GET连接输入用户名和密码,用于访问php页面

时间:2018-01-29 21:08:52

标签: javascript php http-headers

我要做的是为此http get请求添加密码,用户名标头。如果用户名和密码正确,则让.php页面允许该功能。我已经看到很多关于基本授权和发布数据的标题的答案。我想要做的是为这个http get请求添加一些基本的安全性。

data.ts

getData() {     
    let headers = new Headers({ 'Content-Type':'*/*' });
    headers.append('Authorization', 'Basic' + (loginname + ':' + password) );
    this.http.get('https:data.php', { headers: headers }, {})
    .map(res => res.json())
    .subscribe(data => {
    console.log(data.data);
},
    err => {
    this.connectionAlert();
});

}

data.php

<?php
$login = ‘loginname’;  // move to lib config
$pass = ‘password’;  // move to lib config 

if (!isset($_SERVER['PHP_AUTH_PW']!= $pass || $_SERVER['PHP_AUTH_USER'] != $login)) {
    header('WWW-Authenticate: Basic realm="My Site"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'User not allowed';
    exit;
} else {
    echo "<p>Sucess</p>";

}

?>

我的错误是

不能对表达式的结果使用isset()(可以使用“null!== expression”代替)

我在网上找到的答案似乎无法解决问题。

1 个答案:

答案 0 :(得分:1)

isset用于测试变量是否存在,而不是将其与另一个值进行比较。您必须将比较作为if声明的单独部分进行比较:

if (
    !isset($_SERVER['PHP_AUTH_PW'])
    || $_SERVER['PHP_AUTH_PW'] !== $pass
    || !isset($_SERVER['PHP_AUTH_USER'])
    || $_SERVER['PHP_AUTH_USER'] !== $login
) {
    header('WWW-Authenticate: Basic realm="My Site"');

在使用服务器变量之前检查是否存在服务器变量始终是个好主意。在这种情况下,如果用户直接在浏览器中访问该页面,则必须进行!isset()检查,因为在用户有机会在其浏览器的基本内容中输入用户名和密码之前,页面将至少被请求一次验证对话框。有关isset

的详细信息,请参阅PHP manual

为确保安全的用户名和密码检查,我建议使用严格比较!==运算符。不确定这是否与您的用例相关,但请注意,基本身份验证以纯文本形式传输用户名和密码,并且只有在与https一起使用时才能通过互联网保护。

另外,我必须将前两行中的引号更改为普通'字符才能测试此代码:

$login = 'loginname';  // move to lib config                                     
$pass = 'password';  // move to lib config