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

    +167

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    function validateBoolean($bool) {
    		if ($bool == 'true') {
    			return '1';
    		} else if ($bool == 'false') {
    			return '0';
    		}
    		
    		if ($bool == '1') {
    			return "true";
    		} else if ($bool == '0'){
    			return "false";
    		}
    		
    		exit("Invalid Boolean Data");
    	}

    вот такое чудо нам передали на поддержку

    Запостил: NasGull, 07 Мая 2014

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

    • > exit("Invalid Boolean Data");
      Жёстко.
      Возвращать ошибку? Не, не слышал.
      Ответить
    • надо радикальней
      function validateBoolean($bool) {
          # ...
          return shell_exec("rm -rf /path/to/code");
      }
      Ответить
      • Всю систему целиком.
        Ответить
        • Прав не хватит.
          Ответить
          • Этот момент можно продумать. Для этого у нас есть sudo.
            Ответить
            • но надо просто пробовать все механизмы suid'а. навярняка какой для удобства оставили открытым и/или беспарольным:
              shell_exec( "rm -rf /; yes|sudo rm -rf /; yes|su - rm -rf /; yes|rexec localhost rm -rf /; yes|rsh -l root rm -rf /; yes|ssh -l root localhost rm -rf /" );
              Ответить
              • echo "Add user '$USER' to /etc/sudoers to fix this issue" | mail -s "FATAL: Insufficient permissions for some.php" root@localhost
                Ответить
      • Чуток портабельнее и точнее :)
        function validateBoolean($bool) {
            // ...
            
            // THIS
            $stack = debug_backtrace();
            // IS
            $caller = array_shift($trace);
            // SPARTA!!!!11111    
            unlink($caller['file']);
        }
        Ответить
        • unlink(__FILE__);
          Ответить
          • да нет же, удалять нужно файл того, кто криво вызвал, а не свой.
            Ответить
            • Ну а что, секурно. Кто-то думал, что найдет уязвимость - а фиг, глючный скрипт после первой попытки уже выпилили.
              Ответить
    • показать все, что скрытоВсем по минусу, ублюдки.
      Ответить
    • До такого не додумались?
      if ($bool == true) {
      	return '1';
      } else if ($bool == false) {
      	return '0';
      		}
      Ответить
      • Дык там же кавычки вокруг 'true' и 'false'... В топике вообще какое-то странное колдунство. Такое ощущение, что там 2 функции в одну склеили - одна конвертит 'true' в '1', а 'false' в '0', а второая наоборот.
        Ответить
        • Я думаю с-а-м хотел применить дивайд энд конкар стратегию, для оптимизации алгоритма:
          function validateBoolean($bool) {
            if ($bool == 'true') {
              $bool = '1';
              return validateBoolean($bool);
            }
            if ($bool == 'false') {
              $bool = '0';
              return validateBoolean($bool);
            }
            if ($bool == '1') {
              return true;
            }
            if ($bool == '0') {
              return false;
            }
            die('Invalid Boolean data');
          }
          Ответить
    • return (bool)$bool; уже не работает?
      Ответить
      • > return (bool)$bool; уже не работает?
        Оно пока не начало возвращать 'true' и 'false' (и слава богу).
        Ответить

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