- Забрана по ип адрес
WT форуми -> PHP MySQL ASP.NET -> Забрана по ип адрес
Създайте нова тема Напишете отговор 
Автор Съобщение
systems
Турист
Турист

Регистриран на: 28/09/2012 9:04 pm

Support: 3
Bonus: 6
Мнения: 234
Мнение 22/08/2017 3:06 pm     Забрана по ип адрес Отговорете с цитат


Добър ден опитвам се да направя скрипт които да показва реалния ип адрес на потребителя дори когато тои използва прокси и да обединя скрипта със скрипт за бан на ип адрес но сливането нещо не ми се получава моля за малко помощ:

ето кода ми:

PHP code:
<?php
function ipCheck() {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}

elseif (getenv('HTTP_X_REAL_IP')) {
$ip = getenv('HTTP_X_REAL_IP');
}

else {
$ip = $_SERVER['REMOTE_ADDR'];
}

return $ip;
}
echo ipCheck();


$baned = "127,0,0,1";
if($ip == $baned) {

echo "<div class='error'>blockk!!!</div>";
exit;
}
?>



а ето ги пооделно:
<?php
function ipCheck() {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}

elseif (getenv('HTTP_X_REAL_IP')) {
$ip = getenv('HTTP_X_REAL_IP');
}

else {
$ip = $_SERVER['REMOTE_ADDR'];
}

return $ip;
}
echo ipCheck();
?>

PHP code:
<?php
function ipCheck() {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
}

elseif (getenv('HTTP_X_REAL_IP')) {
$ip = getenv('HTTP_X_REAL_IP');
}

else {
$ip = $_SERVER['REMOTE_ADDR'];
}

return $ip;
}
echo ipCheck();
?>


PHP code:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$baned = "";
if($ip == $baned) {

echo "<div class='error'>blockk!!!</div>";
exit;
}
?>



моля ви кажете ми къде греша и ако може малко помощ за реализацията на тази идея благодаря ви.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 144
Bonus: 287
Мнения: 1329
Мнение 22/08/2017 9:13 pm      Отговорете с цитат


https://stackoverflow.com/a/5349693

Цитат:
You can look at the X-Forwarded-For HTTP header if one is sent, but there is no guaranteed way to know.


Цитат:
And to make it absolutely clear: THIS HEADER CANNOT BE TRUSTED unless ALL requests go through a proxy YOU control and no request can reach your server directly without either going through the proxy or that header being stripped somehow. There are so many PHP apps out there which simply use the IP from that header unconditionally if it's available... – ThiefMaster♦ Sep 22 '12 at 2:22


Това прегледа ли го? Сигурен ли си, че искаш да го направиш както си тръгнал?

+ идея: във функцията checkIP можеш вместо $ip = нещо_си да returnваш стойността директно, така няма да има нужда от else и ще е по-кратко и просто.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
n641951363
Нов
Нов

Регистриран на: 29/08/2017 2:35 pm

Support: 3
Bonus: 6
Мнения: 28
Мнение 29/08/2017 3:25 pm      Отговорете с цитат


Идеята да блокираш перманентно потребители по IP Адрес не е много добра.

Помисли за случайте където потребителя ползва обществен wi-fi, VPN, динамично IP или просто мобилни данни
във всички тези случай този бан не само няма да помогне но и ще попречи на легитимни потребители да използват ресурса.

Имай в предвид че хедарите много лесно се променян и ако защитата ти е да разчиташ на хедъри то всеки който знае за тази схема може просто
да изпрати заявка с подправени хедъри и да заобиколи правилата.

в код-а по-долу се опитвам да избегна на това да се разчита само на хедър ако има такъв
и дали това което е в хедъра е валидно IP.

PHP code:

<?php
/**
* @return Array $ips
*/
function getVisitorIPs () {
$ips = [];

$headers = [
'X-FORWARDED-FOR',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_X_CLUSTER_CLIENT_IP',
'HTTP_X_REAL_IP',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED',
'HTTP_CLIENT_IP',
'REMOTE_ADDR'
];

foreach ($headers as $header) {
$ip = getenv($header);
$ip == '' ?: !inet_pton($ip) ?: $ips[] = $ip;
}

return $ips;
}

$ips = getVisitorIPs();
$banned = [
'1.1.1.1',
'2.2.1.1',
'8.8.8.8',
];

foreach ($ips as $ip) {
if (in_array($ip, $banned)) {
echo "<div class='error'>blockk!!!</div>";
die();
}
}
?>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети