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

    +153

    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
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    /*где-то в начале: error_reporting(0);*/
    
    class PhocaGalleryFile{
    	function getCSSFile($id = 0, $fullPath = 0) {
    		if ((int)$id > 0) {
    			$db = &Factory::getDBO();
    			$query = 'SELECT a.filename as filename, a.type as type'
    				.' FROM #__styles AS a'
    			    .' WHERE a.id = '.(int) $id;
    			$db->setQuery($query, 0, 1);
    			$filename = $db->loadObject();
    			if (isset($filename->filename) && $filename->filename != '') {
    				if ($fullPath == 1 && isset($filename->type)) {
    					return self::getCSSPath($filename->type). $filename->filename;
    				} else {
    					return $filename->filename;
    				}
    			}
    		}
    
    		return false;
    	}
    
     . . .
    }

    Поубивал пустые строки (по 2 штуки между каждой строкой кода) и комменты вида:
    /* ===============
    == This function is geting a CSSFile fron database .....
    ===============
    */
    Гы! Код для заказчика должен выглядеть наукообразно и непонятно.
    И обязательно выдавать Notices и Warnings.

    Запостил: virtual_cia, 19 Декабря 2013

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

    • > $filename->filename
      > $filename->type
      отличный выбор имени

      > $fullPath == 1
      видна рука сишника
      Ответить
      • $filename->filename

        Весь в папку)
        Ответить
      • :) Всегда говорил: Если ничего не получается - читайте документацию.
        Ответить
    • Шёл 2013-й год о.р.х., но подготовленные запросы продолжали игнорироваться.
      Ответить
      • кстати, перегрузить бы интерполяцию строк для запросов, вполне бы себе подготовленные запросы получились бы
        Ответить
        • Что-то типа отложенной интерполяции?

          Строка, в которую напихали переменных интерполируется не в строку, а в особый объект, из которого можно вытряхнуть все подставленные значения и шаблон? (При использовании этого объекта в строковом контексте он, для совместимости, кастуется в строку путем тупой подстановки по старым правилам).
          $b = 4;
          $c = "Djigurda";
          $a = "b=$b c=$c";
          $a->pattern; // array("b=", " c=", "")
          $a->substitutions; // array(4, "Djigurda")
          echo $a; // автокаст в строку "b=4 c=Djigurda"
          Ответить
          • Ну и до кучи taint на переменных, как в перле. Чтобы всякие там mysql_query умирали с ошибкой, едва завидев tainted переменную.

            (Интерполяция выставляет флаг tainted на результате если хотя бы один из ее аргументов помечен как tainted).
            Ответить
            • P.S. И причем сделать так, чтобы единственным способом снять taint с переменной были функции в духе int, urlencode, base64_encode, mysql_real_escape_string и т.п. Ну и регулярки.
              Ответить
              • > real escape
                Эскаписты любят убегать от реальности. Но есть один секрет: Это плохо.
                Ответить
                • да, это еще одна смешная история. простой escape не спасал от иньекций, поэтому пришлось сделать его более жестокий вариант, real escape, ахаха, типа "ну тут уж точно no pasaran!"
                  Ответить
                  • Был реальный баг на китайской big5 кодировке, когда mysql_escape_string, не учитывающий кодировку, не срабатывал. Движок какой-то похачили.
                    Ответить
                  • mysql_posoni_blya_budu_realnii_escape_sam_proveryal()

                    P.S. А почему новый функционал нельзя было втащить в старый escape? Он слишком ломал совместимость?
                    Ответить
                    • UPD: Разобрался: mysql_escape_string() не принимала connection, и поэтому не могла учитывать извратные кодировки.
                      Ответить
                    • ну это же пхп с его дядькой Расмусом.
                      боюсь, что он нашел свою аудиторию.

                      в противоположность Матсимоту.
                      Ответить
                      • > ну это же пхп с его дядькой Расмусом.
                        Это не PHP виновато. Копай глубже ;)

                        http://dev.mysql.com/doc/refman/5.0/en/mysql-escape-string.html
                        Ответить
                        • ахаха.
                          мсье, а можно выйти на вас как-то лично, кроме говнокода? напишите мне на [email protected], (пох что свечусь)
                          Ответить
                          • Надо посхоронять адреса на всякий.
                            Ответить
                            • да пох. я тут телефон поменял вставил новую симку. и за сутки от оператора пришло около 50 смс спама.
                              так что уже нет смысла. либо только левый комп, через вай-фай кафе, через 2-4 прокси, под ником vasya23
                              Ответить
                          • Предсказываю: на этот адрес напишут пятьдесят бормандов и адресату предстоит угадать, который из них настоящий.
                            Ответить
                          • Какой то капитанский засвет
                            Ответить
                            • Да его и так уже все знают. Вконтакты лура, кузи и тараса, насколько помню, тут были в комментах.
                              Ответить
                              • Я о том, что догадаться было просто)

                                Проще только мою почту угадать
                                Ответить
                                • Тем не менее, риск случайного совпадения имеется. Вдруг этим ящиком владеет кто-то другой?
                                  Ответить
              • ну что-то вроде
                $b = 4;
                $c = "Djigurda";
                $db->query("select f from t where f1=$b and f2=$c")->exec();
                причем эти $b $c не прямым текстом подставлялись, а корректно бы экранировались
                Ответить
                • Ну да, описанный выше объект передается внутрь функции. Функция определяет, что ей пришла не голая строка, и выполняет правильные для ее случая экранировки.

                  Например mysql_query экранирует кавычки и слеши.
                  А echo экранирует <, & и им подобные.
                  Ответить
      • совсем некуда спешить
        Ответить

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