我希望允许Web应用程序的用户通过将IP地址列入白名单来保护自己的帐户。
我已经在相关数据库中创建了一个表,其中记录了以下内容:
IPID (primary key) | owner | IP_Address
目前,您可以将IP添加到数据库中,并且使用会话数据自动添加所有者。
现在,在保护基于IP的页面方面,我想使用类似以下内容:
$whitelist = array('111.111.111.111', '222.222.222.222');
if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
//Action for allowed IP Addresses
} else {
//Action for all other IP Addresses
echo 'You are not authorized here.';
echo "<br />IP Address: ".$_SERVER['REMOTE_ADDR'];
exit;
}
在上述情况下,数组是硬编码的,但是我显然想使用SQL数据库中的数据来填充数组。因此,为了获取数据,我可以使用类似的东西:
$sql = "SELECT IP_Address FROM ITWhitelist WHERE owner=$userid";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
SafeIP = $row["IP_Address"];
}
作为一个新手,我不使用如何将上述方法与SQL查询结合起来并将数据插入到数组中。我熟悉遍历SQL输出以创建HTML的知识,但不熟悉如何将SQL数据动态添加到数组中。
有人可以帮忙吗?
答案 0 :(得分:-1)
在访问数据库时,您应该搜索地址,这样就无需构建数组。
$allowed = false;
$sqldata = array(":user"=>$userid,":ipaddress"=>$_SERVER['REMOTE_ADDR']);
$sql = "SELECT IP_Address FROM ITWhitelist WHERE owner = :user && IP_Address = :ipaddress";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if($row["IP_Address"] == $_SERVER['REMOTE_ADDR']){
$allowed = true;
break;
}
}
}
if ($allowed)) {
//Action for allowed IP Addresses
} else {
//Action for all other IP Addresses
echo 'You are not authorized here.';
echo "<br />IP Address: ".$_SERVER['REMOTE_ADDR'];
exit;
}
如@tadman所建议,这比构建阵列和测试ip更好。
请注意,以上示例使用的是预准备语句,您可能需要针对特定用途对其进行调整,但我建议始终使用预准备语句。