Защита XSS CodeIgniter удаляет теги <script>из пользовательских вводов ... но я не хочу этого - PullRequest
1 голос
/ 06 марта 2010

CodeIgniter великолепен, но я использую его для разработки сайта, где пользователи должны иметь возможность делиться своим кодом для веб-сайтов. К сожалению, CodeIgniter делает «правильную» вещь, удаляя теги <script> из входных данных моего пользователя в базу данных, поэтому при возврате данные выглядят так:

[удалено] Данные пользователя [удалено]

Однако мне нужен мой сайт для отображения тегов скрипта, но, очевидно, не для их анализа. Как я могу заставить CodeIgniter или PHP возвращать теги <script>, но при этом очищать их для базы данных и возвращать их без выполнения?

Спасибо!

Jack

РЕДАКТИРОВАТЬ: Кстати, нельзя использовать такие вещи, как Markdown, все должно быть выведено в копируемый код, который может работать без изменений где-либо еще

Ответы [ 2 ]

3 голосов
/ 08 марта 2010

Итак, вы хотите отображать теги скрипта, но не хотите, чтобы они отображались браузером?

В таком случае я бы использовал простую функцию htmlspecialchars(), чтобы проанализировать код и преобразовать все теги <script> в &lt;script&gt;.

Я полагаю, что несколько эквивалентная функция в CodeIgniter - form_prep() из помощника Form, но как она ведет себя вне элементов формы, я не знаю. Так что функция htmlspecialchars() должна делать именно то, что вы просите.

Я согласен с Томом выше в том, что вам нужно будет отключить глобальную XSS-фильтрацию, если вы не хотите, чтобы элементы формы с тегами script были удалены перед сохранением.

2 голосов
/ 06 марта 2010

Я предполагаю, что в вашем файле config.php защита XSS установлена ​​как глобальная, измените ее на то, что у меня ниже

/*
|--------------------------------------------------------------------------
| Global XSS Filtering
|--------------------------------------------------------------------------
|
| Determines whether the XSS filter is always active when GET, POST or
| COOKIE data is encountered
|
*/
$config['global_xss_filtering'] = FALSE;
...