Как обеспечить ввод пользователем CSS, а не вредоносного кода?

На моем веб-сайте я хочу включить текстовое поле, которое позволит членам изменять что-либо, что им нужно, css wise в своих профилях …. но я не хочу просыпаться однажды утром, чтобы найти, что мой сайт взломан, или кто-то опечатал и уничтожили все или получили доступ к вещам, которые им не нужно.

Есть ли простой способ проверить, что введенный текст является только css? Я видел здесь еще один вопрос, который был похож, у него был обходной лист XSS и советы о том, что отключить (<и]]> и <! [), Но я не знаю, будет ли этого достаточно. Я определенно буду использовать эту информацию.

По сути, я хочу просто заставить PHP вызывать любой пользовательский css и вставлять его между тегами скрипта для профиля пользователей. Я хочу разрешить как можно больше css. Это лучший способ сделать это? Я не знаю, как создать систему для создания безопасных файлов или терпение, чтобы составить весь раздел с параметрами (тем более, что я хочу предоставить членам больше свободы с их профилями).

Любые советы приветствуются, и если кто-нибудь знает о каком-то скрипте, который делает это уже, это тоже скалочет и поможет мне выяснить, что делать: D.

Когда пользователь входит в систему, добавьте отдельный элемент <link> для этого пользователя. Href может указывать на скрипт, который генерирует css для пользователя, например customcss.php?userid=1234&version=2 *). Сценарий должен только вернуть все, что пользователь ввел ранее. Поскольку вы прилагаете его как отдельный файл CSS, браузер всегда будет рассматривать его как таковой и никогда не будет запускать какие-либо скрипты. Любой HTML или Javascript просто рассматривается как недействительный CSS.

Обратите внимание, однако, что в любом случае есть хоть какой-то вред, включая скрипты, потому что они будут запускаться только в браузере зарегистрированного пользователя, поэтому они могут только взломать собственный взгляд на ваш сайт. Если они хотят добавить Javascript, они все равно могут это сделать, написав свои собственные плагины браузера, поэтому вы не откроете возможность, которой раньше не было.

Главное, о чем нужно беспокоиться, – это

  • Удобство использования. Что делать, если пользователь совершает ошибку и случайно скрывает элемент Body. Как они смогут его сбросить?
  • SQL-инъекция. Независимо от того, что вы делаете или не позволяете, всегда убедитесь, что ваш вход санации.
  • PHP-инъекции. Не выполнять пользовательский контент (eval). Когда-либо.
  • Скрытие информации о пользователе. Добавьте код в URL-адрес customcss.php, чтобы другие пользователи не догадывались об идентификаторе пользователя, чтобы получить представление о настройках других пользователей.

*) Я добавил номер версии в URL-адрес CSS, который вы должны обновлять в базе данных каждый раз, когда пользователь обновляет свой CSS. Если вы этого не сделаете, браузеры будут кэшировать старый CSS, и пользователи начнут жаловаться вам, потому что их изменения не станут видимыми.

Думаю, этого должно быть достаточно

 $style = $_POST['style']; $style = strip_tags($style); $forbiddenStuff = array( '-moz-binding', 'expression', 'javascript:', 'behaviour:', 'vbscript:', 'mocha:', 'livescript:', ); $style = str_ireplace($forbiddenStuff, '', $style); 

хранить $ style в db и отображать в профиле пользователя.

Обратите внимание, что это решение копируется из хорошо известного программного обеспечения и имеет большое сообщество, поэтому я надеюсь, что это должно быть идеально.

O hai MySpace …

Просто дайте пользователям возможность указывать цвета и изображения из веб-формы и создавать из нее таблицу стилей, специфичную для пользователя. Разрешение пользователям определять свой собственный CSS полностью приведет к уродливым, уродливым страницам. См. MySpace 1.0.