Товарищи, я понимаю, что телепаты в отпуске, но может, кому-то интересно сделать "реверс-инжениринг" их протокола (чтобы понять, как там что работает)? Я исходники с радостью скину, если у кого-то есть интерес...
Neoline: ну вот здесь как раз не соглашусь, гадость подцепить шанс равен почти нулю. Каким образом?
Грамотно настроенный сервер не даст исполнить ничего из директории загрузок, это раз. Проверка типа загружаемого файла - это два (в случае с картинками - чтение MIME, попробовать её поресайзить, плюс опять же, веб-сервер не даст исполнить картинку как скрипт). Более сложные файлы - тестить на вирусы умными модулями, если сложность системы того требует (но в любом случае, никакие веб-скрипты не пропускать).
Про изолирование процесса веб-сервера - слышал немного, но не очень разбираюсь. Да, думаю, от чего-то поможет. Хотя если шелл удастся запустить как системный UNIX процесс - тут уже ничего не поможет... А дать команду на запуск, например, через PHP-скрипт, залитый нами же. Но мы же скрипты блокируем, верно?)
Про "запретить выполнение вообще php-кода из htaccess" - ну так кто же нам как злоумышленнику даст грузить htaccess, или модифицировать уже имеющийся? Опять утопия :)
Если злоумышленник работает в компании-вебхостере, и имеет доступ ко всем файлам - тут опять же, снявши голову по волосам не плачут.
Neoline: надо будет проверить. Но я точно знаю, что в PHP есть возможность запрещать для исполнения отдельные функции. Кроме того, чтобы это сделать, надо получить доступ исполнить PHP код. Пока злоумышленник не зальёт шелл - у него ничего не выйдет.
А если есть шелл - можно наверное и ещё проще файлы сессий слить. Кроме того, возможность залить шелл - это уже дырявый код (в данном случае к авторам CMS вопрос), и криво настроенный хостинг, опять же.
Андрей Федоров: я знаю, что используют. Ну это же для небольших набросков на JS, или демонстрации CSS трюка. А там гора разметки совершенно не удобочитаемая, плюс стили, часть из которых во внешнем файле, а часть заинлайнена... Это большой проект, и написанный не везде "красиво" и хорошо. Мне было лень выдирать оттуда куски, да и сложно было выдрать, сохранив полностью внешний вид.
Андрей Федоров: вы сами начали меня критиковать и пытаться искать пробелы в моих знаниях, хотя я просил совсем не об этом. Безопасность Вашу я уважаю, даже не думал пытаться подкладывать какую-то "свинью". Но если для вас обычная страничка с JS опасна... Ну тогда я не знаю, что тут сделать :)
JS код, к слову, удалённый, а веб-страница локальная - ещё одна причина, почему он ни к чему доступа не имеет. И кстати, можно его вообще начисто вырезать, хуже не будет. Всё равно сплошные эксепшены сыпятся. Моя вина, что я его не убрал, да. Боялся, что может как-то внешний вид страницы пострадать, если убрать скрипты совсем.
Я и поставил 100%, когда обернул в контейнер. Но я в идеале хотел без контейнера, а в этом случае 100 процентов означало бы весь экран и даже больше (если только не изменить box-sizing на border-box).
>Там слишком много js, чтобы огульно запускать его у себя
Эм, что, простите? А в чём проблема-то? Боитесь кражи ваших кук?) Так файл-то локальный, а куки читаются только с того домена, на котором скрипт расположен...
>К тому же на ваш хостинг ругается мой браузер
Так я же локальный HTML файл скинул. То, что ваш браузер ругается на один из крупнейших файлообменников (с довольно приличной репутацией, кстати) - это уже Ваши проблемы, извините.
>Я посмотрел ваш HTML
Извините, как вы посмотрели HTML, если не стали скачивать файл? А как узнали, что там много JS, значит всё-таки скачали? :)
Вредоносного кода там нет, там лишь идёт попытка загрузить данные комнаты, которые недоступны (поскольку Вы не залогинены, и поскольку файл запускается локально, а не на сервере проекта).
>Я уверен на 99% что оно там совершенно не требуется. Пришлите скриншот как правильно должна выглядеть ваша форма.
Я же не спорю, что можно без него, но тогда придётся городить много лишних контейнеров. Имхо, это не лучший путь...
>Пришлите скриншот как правильно должна выглядеть ваша форма
Так же, как сейчас, но поле должно идти до кнопок справа. Или вы таки не смотрели страницу?
Владислав Поляков: или как альтернативный и громоздкий вариант, но не требующий поддержки querySelector и XHR2 (для совсем старых браузеров) - получить обычный responseText, а потом использовать это: https://developer.mozilla.org/en-US/docs/Web/API/D... В современных Firefox и Chrome работает "из коробки", для некоторых других браузеров там предложен полифил в конце статьи.
Андрей Федоров: а смысл мне родительскому div давать padding? Вы смотрели разметку? Там есть две квадратные кнопки справа, вообще вне формы, они относительно родительского контейнера позиционируются абсолютно. Высота формы, судя по инспектору, определяется автоматически по контенту (по единственному элементу, который имеет высоту, и позиционируется не абсолютно, то есть в стандартном потоке идёт).
Так что мне нет смысла внутри формы, которая растягивается на всю ширину, использовать padding. Хотя конечно я бы мог это сделать. Мне проще позиционировать эту обёртку абсолютно - даже не относительно формы, а относительно её предка с position: absolute, который по ширине с ней совпадает :)
Меня вот удивляет другое: изначально для textarea была задана ширина как width: 50%. Теперь я в инспекторе любого браузера снимаю галку с этого свойства... И почему-то ширина остаётся прежней! Хотя должна бы как-то поменяться, по логике вещей.
Андрей Федоров: нет, не так, родительскому div я дал left и right, как и хотел.
С чего Вы взяли, что я не вижу разницы между блочными, и инлайн элементами? Странные у Вас какие-то выводы.
Например, тот же img легко можно заставить себя вести как блочный элемент, хотя по умолчанию он inline-block. Но тем не менее, для него автоширина по left и right тоже не вычисляется...
Так конкретную выдержку из стандартов Вы можете указать, которая пролила бы свет на то, почему для div это работает, а для других элементов - нет?
Андрей Федоров: я допускаю, что там можно всё сверстать иначе... Но это потребует кучи вложенных элементов, которые семантически не нужны. То есть лишняя разметка, которая хуже читается, и даёт большую нагрузку на слабые мобильные девайсы... Я-то привык минимумом элементов обходиться (возможно, это и не правильно).
Андрей Федоров: на самом деле, я уже нашёл решение минуты две назад сам... Но было бы классно, если бы Вы объяснили, почему происходит именно так. Желательно в стандарты носом ткнуть :)
Андрей Федоров: не совсем, насколько я помню, в случае display: inline-block будет по содержимому, а в случае display: block - на всю ширину родителя. В данном случае у меня display: block стоит. Но я сейчас даже не про width: auto. Что не так с автоподгонкой ширины по left и right?..
Ссылку на код я уже прикрепил к исходному сообщению.
Андрей Федоров: так это ничего не изменит, если задать ширину в процентах, она будет в процентах. Я же объясняю, автоподстройка не работает, а calc() работает не во всех браузерах, мне нужна поддержка старых Опер и старых IE (и при этом поля в пикселях). Почему не работает автовычисление, вот в чём вопрос. Потому что textarea?
P. S. Сейчас проверил с элементами img и button - всё то же самое. Как так? При задании left и right всё должно работать как нужно...