我正在尝试编写一个SIMPLE通用PHP块包含将读取文本文件以填充IP数组的代码,然后使用该数组来比较访问者IP以确定它是否应该结束显示页面,阻止该页面或网站。此代码还将日志行删除到403文件,然后发送失败者(用户)查看它,结束他们对该站点的访问。该行将其信息附加到开放式403文件的末尾。
可以将包含放在您不希望看到的IP列表的任何地方。问题是我是一个毫无希望的黑客,并且对这些循环和语法没有很好的把握。你可以帮我解决这个问题吗?它似乎读取IP列表确定,但然后while循环似乎是错误的。我可以更多地简化这一点。但我不确定问题是什么..我选择变量名称......也许。
<?
$IP = $_SERVER['REMOTE_ADDR'];
$link_file = "bannedips.dat";
$lines = file($link_file);
foreach($lines as $line){
if(!empty($line)){
$line_array = explode(',', $line);
$bannedip = trim(trim(strip_tags($line_array[0]), "\x00..\x1F"));
}
}
while $bannedip if ((substr($IP,0,10) == $bannedip) {
$line = date('Y-m-d H:i:s') . " - <b>$IP</b><br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
?>
答案 0 :(得分:0)
您可以从文件中构建一个禁止IP的数组(您只需覆盖代码中的最后一个,使用$bannedip[]
将其添加到列表中),然后使用in_array()
根据此列表检查用户IP ...
$link_file = "bannedips.dat";
$lines = file($link_file);
$bannedip = []; // Create start array
foreach($lines as $line){
if(!empty($line)){
$line_array = explode(',', $line);
$bannedip[] = trim(trim(strip_tags($line_array[0]), "\x00..\x1F"));
}
}
if(in_array($IP, $bannedip )) {
$line = date('Y-m-d H:i:s') . " - <b>$IP</b><br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
处理输入文件可能有一种更整洁的方法,但不知道格式很难说,所以我保留了你的代码。
<强>更新强>
如果您禁止IP文件只是一个IP地址列表,您可以用...替换负载和foreach
$bannedip = file($link_file, FILE_IGNORE_NEW_LINES);
$bannedip = array_filter($bannedip);
<强> UPDATE2:强> 你似乎已经自己解决了这个问题,但是发布了一个实际文件格式的样本,我想我会补充一下它是如何完成的......
$IP= "31.130.4.241";
$link_file = "bannedips.dat";
$bannedip = file($link_file, FILE_IGNORE_NEW_LINES);
$bannedip = array_map("str_getcsv", $bannedip);
$bannedip = array_column($bannedip, null, 0);
if(isset($bannedip[$IP])) {
$line = date('Y-m-d H:i:s') . " - <b>{$bannedip[$IP][0]}</b> - {$bannedip[$IP][1]} - {$bannedip[$IP][2]}<br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
答案 1 :(得分:0)
最初的目标是编写一小段INCLUDE代码,该代码将解析文本文件,查找匹配的IP,记录信息,并将垃圾邮件混蛋放到403页面。这样,违规用户可以访问任何页面,但包含此脚本的页面除外。非常有选择性的阻止。
这是我的最终代码:
<?
$IP = $_SERVER['REMOTE_ADDR'];
echo $IP;
$link_file = "bannedips.dat";
$lines = file($link_file);
foreach($lines as $line){
if(!empty($line)){
$line_array = explode(',', $line);
$inputip = trim(trim(strip_tags($line_array[0]), "\x00..\x1F"));
$website = trim(trim(strip_tags($line_array[1]), "\x00..\x1F"));
$email = trim(trim(strip_tags($line_array[2]), "\x00..\x1F"));
if($IP == $inputip) {
$line = date('Y-m-d H:i:s') . " - <b>$inputip</b> - $website - $email<br>\n";
file_put_contents('403.shtml', $line . PHP_EOL, FILE_APPEND);
header('Location: 403.shtml');
die();
}
}
}
?>
数据文件格式如下:
23.105.159.238,penilengorgement.com,randomjerk@spammer.net
31.130.4.240,scamtown.com,spameister@viagraads.com
所以,现在当我禁止IP(垃圾邮件发送者)时,它从我的博客中提取信息,并将其放入链接文件中,在链接文件中可以对其进行解析并用于记录重复违规者,并为他们提供替代尝试进入我的网站,向他们提供他们的同行名单。