1. Куча / Говнокод #13048

    +126

    1. 1
    <img src="/html/../images/menu/top.png" alt="" />

    Весь HTML вот так зашифрован, не знаю нормально ли это?

    Запостил: straga_coda, 24 Мая 2013

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

    • Сойдёт. Если работает, то сойдёт. Хотя, конечно, это говно.
      Ответить
    • Разумеется, ненормально, потому что слэш в конце нормален для XHTML, но никак не для HTML.

      Что смутило? Если путь к файлу, то всё зависит от сервера. "/html" может быть cgi-скриптом, тогда "../images/menu/top.png" — это параметры его вызова. Может стоять mod_rewrite, например.
      Ответить
      • Я не уверен что по этому поводу говорит RFC, но не удивился бы, если бы он разрешал, или даже предписывал нормализовать путь еще до посылки на сервер.
        Ответить
        • RFC1738 по этому поводу ничего не говорит:
          Within the <path> and <searchpart> components, "/", ";", "?" are
          reserved. The "/" character may be used within HTTP to designate a
          hierarchical structure.


          RFC2396 уже рекомендует нормализовать URL в клиенте перед отправкой запроса, но только если путь относительный. Остальные же положения . и .. приведены в параграфе «Abnormal examples»:
          Similarly, parsers must avoid treating "." and ".." as special when
          they are not complete components of a relative path.


          Т. е. путь "html/../images/menu/top.png" нужно нормализовать, потому что он относительный, а с "/html/../images/menu/top.png" ничего не делать, потому что он начинается со слэша.
          Ответить
        • Не поленился и проверил. Допотопный IE 1.5 нормализует относительные пути и оставляет без изменения абсолютные в соответствии с RFC2396. Т. е. "html/../images/menu/top.png" он заменяет на "images/menu/top.png", а "/html/../images/menu/top.png" прямо в таком виде с точками отправляет на сервер.

          Современные веб-браузеры (IE, Опера, ФФ, Хром) нормализуют все пути (и абсолютные, и относительные) ещё до отправки запроса к серверу. Но в RFC3986, вышедшем в 2005 году, абзаца, явно разграничивающего правила для абсолютных и относительных путей, уже нет.
          Ответить
          • Я думаю, это скорее всего соображение безопасности. Например, если между HTTP сервером и пользователем стоит кеширующий прокси, и если этот прокси можно скомприметировать менее оптимальным путем указывающим на ту же страницу - это была бы очень серьезная дырка.
            Ответить
            • Но согласитесь, закрывать дырку на стороне клиента было бы глупо. Так что тут все зависит от того, как себя должен вести сервер, получив неоптимальный путь типа /html/../images/css (выдавать ошибку?). А как себя ведет клиент - всем насрать.
              Ответить
              • Не, смысл в том, что UA защищает клиента в этом случае. Серверу-то ничего не будет от того, что в кеше появится страница, которую сам сервер не хранит - но если она попадет к клиенту и обманет его (и приведет к тому, что клиент, например, пошлет свой пароль куда-то не туда), то это плохо.
                Ответить

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