我想要做的是向此 http get 请求添加密码、用户名 header 。如果用户名和密码正确,则让 .php 页面允许该功能。我看到了很多有关基本授权和发布数据 header 的答案。我想做的是为这个 http get 请求添加一些基本的安全性。
数据.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();
});
}
数据.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”代替)
我在网上找到的答案似乎并不能解决问题。
最佳答案
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()
检查,因为在用户有机会输入用户名之前,该页面将至少被请求一次和密码在浏览器的基本身份验证对话框中。请参阅PHP manual有关 isset
的更多信息。
为了确保安全的用户名和密码检查,我建议使用严格的比较 !==
运算符。不确定这是否与您的用例相关,但请注意,基本身份验证以纯文本形式传输用户名和密码,并且仅在与 https 一起使用时通过互联网才安全。
此外,我必须将前两行中的引号更改为纯 '
字符才能测试此代码:
$login = 'loginname'; // move to lib config
$pass = 'password'; // move to lib config
关于javascript - ionic 3 HTTP-GET 连接输入用户名和密码以访问 php 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48510002/