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;

}

}