21

Re: Модуль захисту від DoS атак

Sensetivity написав:
VTrim написав:

Далі видалення IP з блоку (файлу .htaccess)

Гляньте чи тут не набидлокодив :)
Початковий код..

<?php

(string) $ip = '68.5.71.42';
   
(array) $file = file('.htaccess');
(string) $ip_str = 'deny from '.$ip;

if(in_array($ip_str,$file))
{
(string) $del_ip = str_replace($ip_str,null,implode($file));
file_put_contents('.htaccess',$del_ip);
echo 'IP видалений з блоку!';
}
else
{
echo 'Такий IP не заблокований';
}

А я думав у мене фіговий код.
(string) $ip = '68.5.71.42'; і так рядок, нащо тут ота "стрінґ" ?
(array) $file = file('.htaccess'); file() і так повертає масив, нащо тут "аррей" ?
(string) $ip_str = 'deny from '.$ip; Див №1

Прихований текст

Просто VTrim десь глибоко в підсвідомості джавіст, що змушує його писати String ip = "68.5.71.42"; на PHP :D

Подякували: VTrim1

22

Re: Модуль захисту від DoS атак

Може як коментар? Тоді краще дійсно коментарем робити для зручності компілятора.

23

Re: Модуль захисту від DoS атак

Так я для того і пишу.
(array),(int),(string) замість коментарів можна сказати :).
Бо воно ні на що не впливає (на тип даних).

24

Re: Модуль захисту від DoS атак

Sensetivity написав:
VTrim написав:

Далі видалення IP з блоку (файлу .htaccess)

Гляньте чи тут не набидлокодив :)
Початковий код..

<?php

(string) $ip = '68.5.71.42';
   
(array) $file = file('.htaccess');
(string) $ip_str = 'deny from '.$ip;

if(in_array($ip_str,$file))
{
(string) $del_ip = str_replace($ip_str,null,implode($file));
file_put_contents('.htaccess',$del_ip);
echo 'IP видалений з блоку!';
}
else
{
echo 'Такий IP не заблокований';
}

А я думав у мене фіговий код.
(string) $ip = '68.5.71.42'; і так рядок, нащо тут ота "стрінґ" ?
(array) $file = file('.htaccess'); file() і так повертає масив, нащо тут "аррей" ?
(string) $ip_str = 'deny from '.$ip; Див №1

<?php

$ip = '68.5.71.42';
$file = file('.htaccess');
$ip_str = 'deny from ' . $ip;

if (in_array($ip_str, $file)) {
    $del_ip = str_replace($ip_str, null, implode($file));
    file_put_contents('.htaccess', $del_ip);
    echo 'IP видалений з блоку!';
} else {
    echo 'Такий IP не заблокований';
}

Уже гарніше та зрозуміліше.

Якщо вам це не подобається (такі коментарі),то Ви ніколи в житті з PHP не злізете :)
Де в інших мовах йде обовязкова типізація.

25

Re: Модуль захисту від DoS атак

Строга типізація і необхідність вказувати тип ніяк не зв’язані.

Подякували: koala, Chemist-i2

26

Re: Модуль захисту від DoS атак

VTrim написав:

Якщо вам це не подобається (такі коментарі),то Ви ніколи в житті з PHP не злізете :)

Я, мабуть, теж ніколи не злізу з PHP, мені такі коментарі теж не подобаються :)

27

Re: Модуль захисту від DoS атак

Ну ок,хочеш як краще,а виходить як завжди..

28

Re: Модуль захисту від DoS атак

VTrim написав:

Ну ок,хочеш як краще,а виходить як завжди..

Якщо дійсно хочете як краще, то вам варто перестати бути програмістом на PHP і стати програмістом. Подивіться на інші мови, спробуйте на них щось написати, тоді ваш код на PHP стане набагато кращим.

Прихований текст

Це якщо ви взагалі захочете на нього повертатись

29

Re: Модуль захисту від DoS атак

quez написав:
VTrim написав:

Ну ок,хочеш як краще,а виходить як завжди..

Якщо дійсно хочете як краще, то вам варто перестати бути програмістом на PHP і стати програмістом. Подивіться на інші мови, спробуйте на них щось написати, тоді ваш код на PHP стане набагато кращим.

Прихований текст

Це якщо ви взагалі захочете на нього повертатись

Думаю справа не в цьому.
Так,PHP далеко не найкраща,але що,якщо люблю саме веб і саме PHP/JS.
Можу писати що завгодно (може і велосипедом та напишу),але при цьому допускати елементарні помилки або ж не знати елементарного,як цей ваш приклад з true/false.

Пробував трішки С..,для мене це не складно. Але що я врезультаті навчусь,шо корисного напишу,якусь консольку?
Далі терпіння не хватить..:)

30

Re: Модуль захисту від DoS атак

А я вважаю - головне це абстракції, які відтворюються в коді, а мови то десяте діло. Додам ще, що JS без функційного програмування є чистою індусією. Погляньте на underscore.js

31 Востаннє редагувалося quez (14.02.2015 19:22:24)

Re: Модуль захисту від DoS атак

VTrim написав:
quez написав:
VTrim написав:

Ну ок,хочеш як краще,а виходить як завжди..

Якщо дійсно хочете як краще, то вам варто перестати бути програмістом на PHP і стати програмістом. Подивіться на інші мови, спробуйте на них щось написати, тоді ваш код на PHP стане набагато кращим.

Прихований текст

Це якщо ви взагалі захочете на нього повертатись

Думаю справа не в цьому.
Так,PHP далеко не найкраща,але що,якщо люблю саме веб і саме PHP/JS.
Можу писати що завгодно (може і велосипедом та напишу),але при цьому допускати елементарні помилки або ж не знати елементарного,як цей ваш приклад з true/false.

Пробував трішки С..,для мене це не складно. Але що я врезультаті навчусь,шо корисного напишу,якусь консольку?
Далі терпіння не хватить..:)

А шо ви так тих консольок боїтесь?

Навчитесь ви в першу чергу думати не конструкціями мови, а логічними конструкціями. Побачите, що існують зовсім інші підходи до розв’язків проблем. Саме для цього я й пропоную вам вивчити подивитись на інші мови — ну або почитати теорію, абстраговано від мов програмування, але це ще менше вам сподобається. Щось корисне завжди можна придумати — всякі гуї, ігри і т. д. Більше того, бекенд для вебу можна писати на більшості мов, і на деяких це навіть не буде вважатись збоченням.

32

Re: Модуль захисту від DoS атак

Та не треба скрізь писати оте (array) & (string). Ви що сказилися?

33

Re: Модуль захисту від DoS атак

У вас там є рядок

(int)$interv = (float)$_POST['interv'];

і ще один

<input type="text" name="interv" value="'.file_get_contents('interv.dat').'">  сек.

а в файлі interv.dat записано 0.8. Ви в курсі що

(int) (float) '0.8';

дасть в результаті нуль? Чи я чогось не розумію?

34

Re: Модуль захисту від DoS атак

Invader написав:

У вас там є рядок

(int)$interv = (float)$_POST['interv'];

і ще один

<input type="text" name="interv" value="'.file_get_contents('interv.dat').'">  сек.

а в файлі interv.dat записано 0.8. Ви в курсі що

(int) (float) '0.8';

дасть в результаті нуль? Чи я чогось не розумію?

Ні,не дасть,бо (int) тут як коментар,забув видалити.

35

Re: Модуль захисту від DoS атак

А для чого таке писати тільки в якості коментаря?

36

Re: Модуль захисту від DoS атак

Шо ви пристали до тих коментарів,я їх писав,бо знаю що тут не всі кодять на PHP і щоб просто бачили що яка змінна повертає і у випадку чого дали якусь пораду по коду.

37

Re: Модуль захисту від DoS атак

gettype((float) '0.8');

повертає double.

38

Re: Модуль захисту від DoS атак

Значить double,але все працює як треба.
Власне скрипт і писався "аби працювало" :)

39

Re: Модуль захисту від DoS атак

Переписав під класс

<?php

class BanIP
{

 const Interval = 0.8; 

 const Limit = 5;

 const Dir = '/ip_logs/';

 private static function getRoot() {

   return $_SERVER['DOCUMENT_ROOT'];

 }

 private static function getIp() {

   if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

      return $_SERVER['HTTP_CLIENT_IP'];

  }

   elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

      return $_SERVER['HTTP_X_FORWARDED_FOR'];

      }

   else {

      return $_SERVER['REMOTE_ADDR'];

      }
   } 

  private static function isIpLogs() {

   if(!is_dir(self::getRoot().self::Dir)) {

      mkdir(self::getRoot().self::Dir); 

      file_put_contents(self::getRoot().self::Dir.'.htaccess', 'deny from all');
    
    }
  
  return;

  }

  private static function isIpFile() {

   if (!file_exists(self::getRoot().self::Dir.self::getIp().'.dat'))

  file_put_contents(self::getRoot().self::Dir.self::getIp().'.dat', null);

  return;

  }

  static function unban($ip) {

  $file = file(self::getRoot().'/.htaccess');

  $ip_str = 'deny from ' . $ip;

  $str_file = implode($file);
 
  if (strstr($str_file, $ip_str)) {

    $del_ip = str_replace($ip_str, null, $str_file);

    file_put_contents(self::getRoot().'/.htaccess', $del_ip);

    echo 'IP розблокований';

   } else {

    echo 'Такий IP не заблокований';

  } 

  return;

  }

 static function setConnect($cVal = true) {

   echo self::isIpLogs();

   echo self::isIpFile();

  $lIP = file(self::getRoot().self::Dir.self::getIp().'.dat');

  $cIP = count($lIP);

  if($cIP >= self::Limit) {
  
  for ($i=0; $i<$cIP; ++$i) $cVal = $cVal && ($lIP[$i+1] - $lIP[$i]) < self::Interval;

  if ($cVal) {
  
  file_put_contents(self::getRoot().'/.htaccess', PHP_EOL.'deny from '.self::getIp().PHP_EOL, FILE_APPEND);

  unlink(self::getRoot().self::Dir.self::getIp().'.dat');

  exit('Ваш IP заблокований');

  }

  file_put_contents(self::getRoot().self::Dir.self::getIp().'.dat', null);

  }

  file_put_contents(self::getRoot().self::Dir.self::getIp().'.dat', microtime(true).PHP_EOL, FILE_APPEND);

  return;

}

}