Yii, пишемо фільтр для запобігання xss-атак, allframeworks - журнал про веб-розробці

Почну з невеликого відступу.

І все таки правильно кажуть, а на некторих форумах (особливо UNIX-ових), прямо кричать - RTFM! Хто не зрозумів очем йдеться - RTFM в перекладі означає «читай цю чортову документацію!». Це все я власне ось до чого: вивчаючи і щось намагаючись написати на фреймворку Yii, виникла задача фільтрації вхідних даних від різного роду «шкідливих» символів (аля XSS-атака) і перше що прийшло в голову - це написати свій фільтр (що я все таки і зробив), проте creocoder, на форумі Yii, абсолютно спрпаведліво зауважив, що не навіщо винаходити велосипед, все вже є готове, необхідно тільки RTFM! Йшлося про клас CHtmlPurifier, який є обгорткою для бібліотеки HTML Purifier, і виконує всі ті функції, які мені необхідні (правда я так і не спробувала його в дії, може і даремно звичайно). Але якщо вже я почав писати свій фільтр - вирішив все таки це справа завершити, та й просто написати статтю про фільтри в Yii.

І так!
Фільтри - фрагменти коду, які можуть бути виконані до і \ або після виконання екшену контролера. Фільтри, при необхідності, можуть не допустити виконання запитаного екшену.

Фільтри можуть бути як методами поточного контролера, так і окремими класами - що дозволяє повторно їх використовувати. Якщо фільтр реалізується як метод класу, він повинен мати префікс «filter».


Фільтр, реалізований у вигляді окремого класу, повинен бути спадкоємцем класу CFilter.


Для активації фільтрів, необхідно в контролері перевизначити метод filters, який повинен повернути масив всіх фільтрів для даного контролера (або його окремих екшенів).


У цьому прикладі 'accessControl' - фільтр, реалізований як метод контролера, а 'application.filters.XssFilter' - фільтр, реалізований у вигляді окремого класу, який зберігається в каталозі / protected / filters /. 'Clean' - встановлюємо властивість фільтра.

Це була коротка довідка по фільтрам в Yii, більш детально можна почитати тут.

Тепер безпосередньо приступимо до реалізації нашого фільтра. Функцію очищення даних, яка і виконує всю роботу - я взяв з фреймворка Kohana. Ну на цьому досить слів, наведу сам код фільтра - він зовсім простий, так що думаю проблем бути не повинно.

Я зовсім трохи протестував це фільтр - на перший погляд - все працює!

Хочу додати свої зауваження до реалізації фільтрів в Yii ...

Мені здається було зручно мати метод, який викликається перед виконанням preFilter і postFilter, наприклад init () - який виконує ініціалізацію фільтра, при цьому в ньому повинні бути доступні параметри, передавемие в фільтр з контролера (з цієї причини неможливо використовувати __construct). Звичайно можна розширити CFilter для цих цілей, але «рідна» можливість зробити це була б найкращим варіантом.

Сподіваюся, описаний матеріал виявиться корисним!

Схожі статті