Tastypie дезинфицировать ввод?

Какой самый эффективный способ дезинфицировать ввод пользователя с помощью Tastypie? Прямо сейчас, если пользователь вводит что-то вроде привет, HTML-теги сохраняются, поэтому при их отображении текст выделяется жирным шрифтом. Как мне дезинфицировать все входные данные, кроме изменения obj_create для каждого ресурса?

Кроме того, поскольку я новичок в веб-безопасности, должен ли я также дезинфицировать ввод пользователя во внешнем интерфейсе? Я не уверен, должен ли я дезинфицировать ввод перед отправкой POST-запроса в API deliciouspie или должен дезинфицировать ввод, когда deliciouspie обрабатывает ввод?

Изменить: я обнаружил, что могу избежать HTML в своих шаблонах подчеркивания, отображая данные с помощью ‹%- %>, а не ‹%= %>. Почему подчеркивание не делает это по умолчанию? Я чувствую, что это большой риск для безопасности. Если я где-то случайно забуду это сделать, то мне конец.

Я думаю, что вышеизложенное решает проблему безопасности внешнего интерфейса, но как насчет внутреннего интерфейса? Есть ли способ узнать, уязвим ли я для SQL-инъекций? Будет ли deliciouspie дезинфицировать ввод, когда я выполняю запрос POST/PUT?


person egidra    schedule 04.05.2012    source источник


Ответы (2)


Никогда, никогда, никогда не отображайте ненадежный пользовательский ввод в браузере. Единственный способ, которым вы видите это в браузере, - это если у вас есть |safe в выходном фильтре. Не делай этого. Также не устанавливайте свойство как mark_safe=True в модели.

person Issac Kelly    schedule 04.05.2012
comment
Фильтруя с помощью |safe, вы имеете в виду шаблоны Django? Я не использую шаблоны Django для рендеринга своих моделей. Я использую шаблоны подчеркивания. Кроме того, у меня в модели нет mark_safe=True, так как же проходят HTML-теги? Я бы понял, если бы подчеркивание не скрывало HTML, но разве Django не хранил бы теги HTML? - person egidra; 05.05.2012
comment
Плевать на комментарий выше. Я внес правку в исходный пост. - person egidra; 05.05.2012
comment
Я остаюсь при своем комментарии. Django по умолчанию никогда не отображает небезопасный контент. Я бы не стал изменять ввод перед тем, как сохранить его в БД, я бы просто не стал его отображать. Приятно знать, что это подчеркивание с плохими значениями по умолчанию, а не мы! :) Нет известных уязвимостей SQL-инъекций в ядре django или deliciouspie, возникающих из-за небезопасного ввода. Мы правильно экранируем вещи перед вызовом SQL - person Issac Kelly; 05.05.2012

Я добавил к ресурсу метод обезвоживания, который перезаписывал опасное поле на пути к браузеру, например:

def dehydrate(self, bundle):
    bundle.data['field_to_sanitize'] = bundle.data['field_to_sanitize'].replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("'", "&#39;").replace('"', "&quot;")
    return bundle

Это не лучшее решение, но оно позволит избежать многих самых опасных сущностей. Если у вас есть удобная функция htmlescape, вы можете использовать ее.

person George Griffin    schedule 03.09.2012