1. PHP / Говнокод #26832

    0

    1. 1
    2. 2
    3. 3
    Именно поэтому я за «PHP» #3
    #1: https://govnokod.ru/26462 https://govnokod.xyz/_26462
    #2: https://govnokod.ru/26827 https://govnokod.xyz/_26827

    Запостил: gostinho, 31 Июля 2020

    Комментарии (28) RSS

    • https://www.php.net/manual/ru/function.sleep.php#105149
      // A really simple, but effective way of majorly slowing down bruit force attacks on wrong password attempts.
      
      // In my example below, if the end-user gets the password correct, they get to log in at full speed, as expected.
      // For every incorrect password attempt, the users response is delayed by 2 seconds each time; mitigating the
      // chances of a full bruit force attack by a limit of 30 lookups a minute.
      
      // I hope this very simple approach will help make your web applications that little bit more secure.
      
      <?php
      public function handle_login() {
          if($uid = user::check_password($_REQUEST['email'], $_REQUEST['password'])) {
              return self::authenticate_user($uid);
          }
          else {
              // delay failed output by 2 seconds
              // to prevent bruit force attacks
              sleep(2);
              return self::login_failed();
          }
      }
      ?>

      Какая защита )))
      Ответить
      • Комменты к документации «PHP» — это просто склад эпического дерьма.
        С той же страницы:
        // This will allow you to use negative values or valuer below 1 second.
        
        <?php slaap(0.5); ?>
        
        <?php
        function slaap($seconds)
        {
            $seconds = abs($seconds);
            if ($seconds < 1):
               usleep($seconds*1000000);
            else:
               sleep($seconds);
            endif;   
        }
        ?>

        > This will allow you to use negative values
        Только в «PHP» можно отправлять поток управления в прошлое. Именно поэтому я за «PHP».
        // Here is a simplified way to flush output to browser before completing sleep cycle. 
        // Note the buffer must be "filled" with 4096 characters (bytes?) for ob_flush() to work before sleep() occurs.
        <?php
        ob_implicit_flush(true);
        $buffer = str_repeat(" ", 4096);
        echo "see this immediately.<br>";
        echo $buffer;
        ob_flush();
        sleep(5);
        echo "some time has passed";
        ?>

        Какой flush )))
        Ответить
        • >4096 characters (bytes?)

          Чувствуется глубокое понимание современных информационных технологий
          Ответить
        • > slaap
          https://www.youtube.com/watch?v=qOgVuO1s8ys
          Ответить
        • > Basically, flushing solves the infamous 504 Gateway Time-out error.

          Сука, вместо того чтобы своё тормозное говно пофиксить, они вывод флашат. Ещё бы по таймеру пробелами срали.
          Ответить
      • Типа если у тебя N потоков обрабатывает запрос, то я сделал тебе N неправильных запросов, и ты отдыхаешь?
        Ответить
      • script.php?sleep=10 // Will stop after 10 secs


        какой API :))
        Ответить
      • и ты, bruit
        Ответить
    • // delay failed output by 2 seconds
              // to prevent bruit force attacks and make DDoS attacks more effective
      Ответить
      • bruit [bʁɥi] (фр.) = шум.
        Что за шумовая сила?
        Ответить
        • Брют это вроде сухое шомпанское?
          Ответить
          • Есть вино - зовётся "Брют".
            От него всегда блюют.
            Ответить
            • https://ljpics.livejournal.com/1_p,T2MEVxbpne,vi/2QxpUxar/7/1829477/10134210/fotki_proxy_web26143637-vi.jpg
              Ответить
    • Басня "Пыхомакака и сигналы"

      Since sleep() can be interrupted by signals i've made a function which can also be interrupted, but will continue sleeping after the signal arrived (and possibly was handled by callback). It's very useful when you write daemons and need sleep() function to work as long as you 'ordered', but have an ability to accept signals during sleeping.
      
      <?php
      function my_sleep($seconds)
      {
          $start = microtime(true);
          for ($i = 1; $i <= $seconds; $i ++) {
              @time_sleep_until($start + $i);
          }
      }
      ?>


      > can also be interrupted, but will continue sleeping after the signal arrived
      WAT?
      Ответить
    • if you for some reason need a constant-time implementation of realpath(), try
      
      <?php
      
      function realpath_constant_time(string $path, float $target_seconds, bool &$constant_time_success = null){
          $start_time=microtime(true);
          $ret=realpath($path);
          $constant_time_success = @time_sleep_until($start_time+$target_seconds);
          return $ret;
      }
      ?>
      
      for example, a realtime that always uses exactly 1 millisecond (should be more than enough for SSD-based servers, perhaps rotating harddrive based servers may need something closer to 10 milliseconds, i don't know):
      
      <?php
      realpath_constant_time("/path/to/../to/file.txt",0.001,$constant_time_success);
      ?>
      
      and you can use $constant_time_success to see if you needed more time (and thus failed to do realpath() in constant-time), or if you succeeded.
      Ответить
      • Мартышка прерывает выполнение реалпаса, если он слишком медленный?

        >серверс
        VPSы? Не, не слышал
        Ответить
        • Наоборот, удлинняет слипом, если риалрас оказался слишком быстрым.
          Ответить
          • да, туплю вечером

            а
            а зачем?
            Ответить
            • Давай вечером
              С тобой встретимся,
              Будем php курить
              Ответить
            • Пытаются защититься от атак замерами таймингов, видимо. Чтобы ты не понял какие файлы существуют.

              Какое секьюрити )))
              Ответить
              • А есть ли реальный пример того, что можно таким образом взломать? Ну, допустим, узнал я, что есть на сервере файл "includes/functions.php". И что дальше?
                Ответить
                • А х.з., если у тебя доступ есть, то ты и так можешь попробовать открыть, нету смысла делать это через realpath. А если нету - то имя ничего особо не даст.

                  Может быть там юзерские файлы какие-то, имена которых не хочется светить?

                  Ну или какие-то свойства системы выяснить по именам чтобы поискать соотв. эксплойты.
                  Ответить
    • Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/stb100/public_html/wp-content/plugins/types/vendor/toolset/types/embedded/includes/wpml.php on line 646

      Сайт Стеленбосского университета в ЮАР.
      Ответить
    • https://habr.com/post/513558/
      >>>
      История с синтаксисом атрибутов в PHP 8 продолжается.
      
      Вкратце: сначала был << >>, переголосовали за @@, а теперь новый виток обсуждений.
      У @@ были проблемы с парсером, но они решены благодаря нижеупомянутому RFC про
      неймспейсы. Тем не менее у него есть другие проблемы, и в качестве альтернативы
      предлагался вариант #[ ] как в Rust, но и у него есть минусы.

      >>> В PHP 8, при сравнении чисел и строк с помощью нестрогого == оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.
      >>> 0 == 'foobar' теперь официально false.

      >>> В PHP 8 будет новый оператор nullsafe: ?->.

      Именно поэтому я за «PHP».
      Ответить
      • PHP — лютая годнота.
        Ответить
      • Оператор nullsafe — полезное предложение. От кучи лапши можно будет избавиться.

        А вот «Renamed Parameters», как в «Свифте» — это забавно. Можно будет писать запутанный код: function($first:second, $second:first).

        >> Пользователям Laravel 5.5 рекомендуется не использовать драйвер сессий 'cookie'.

        Какой багор )))
        Ответить
        • А при чём тут Свифт? Это скорее как в Пистоне.

          В Свифте позиция аргумента fixed
          Ответить

    Добавить комментарий