Я новичок в Django. Прошлой ночью я много работал над тем видом, который позволил бы мне редактировать любые объекты в моем текущем проекте; Главы, Истории и Миры. Чтобы убедиться, что я точно знаю, какой объект базы данных изменяется, я добавил запись в базу данных для редактирования таблиц, которая хранит хэш, тип редактируемого объекта (например, «Глава») и идентификатор этого объекта объект, найденный в базе данных. Хэш добавляется в форму как скрытый ввод.Обнаруживается общий вид обновления update_object Django? Должен ли я продлить его или сделать свой собственный для обеспечения безопасности?
На обратной стороне, после отправки формы, я беру хэш и использую его, чтобы найти связанный элемент редактирования в базе данных. Затем я использую это, чтобы найти, какой объект изначально редактировался. Это было сделано по двум причинам:
Я могу знать, какой предмет действительно редактируется. Если все элементы формы были изменены, сравнивать (кроме URL-адресов) нечего, чтобы действительно знать, какой объект редактируется.
Пользователи должны не иметь возможности взломать интерфейс, чтобы делать странные вещи, например, изменять неправильные истории.
Сегодня я обнаружил, что Django имеет общий вид под названием update_object
. Кажется, мне это очень нравится. Но учитывая, что он не использует автоматическую базу данных для обеспечения того, чтобы редактируемый объект редактировался или даже определял , который редактирует объект, является ли это безопасным? конечно, должен быть простой способ взломать его на переднем конце, изменив HTML-элементы.
Во-вторых, если это вызывает обеспокоенность, вы бы рекомендовали мне сохранить собственное редактирование или расширить расширение update_object или какое-либо другое решение?
И, наконец, я собираюсь сделать это правильно? Пожалуйста, поправьте меня, если я не буду думать о решениях этой проблемы правильно.
Я не чувствую, что это вопрос, который требует кода. Это скорее общий вопрос о безопасности форм, поскольку они относятся к Django.
Спасибо,
ParagonRG
Спасибо, я не заметил, что эти общие представления устарели! Мне нужно будет общаться с UpdateView. Кроме того, интересно, я не вижу скрытого элемента формы, который указывает, какой объект редактируется. Проверьте это здесь (это довольно коротко): http://dpaste.com/733945/. Это объект World, а его идентификатор - 1. Больше нечего его идентифицировать, и я не вижу ни того, ни другого. Как он мог работать без него? – Paragon
@Paragon Я полагаю, что он использует URL, а не скрытый идентификатор, что в значительной степени эквивалентно. Как это бывает, вы можете увидеть источник просмотров [здесь] (https://github.com/django/django/blob/master/django/views/generic/edit.py); если вы следуете следу наследования назад, он заканчивается [этим методом] (https://github.com/django/django/blob/master/django/views/generic/detail.py#L19), который находит объекты на основе на 'pk' или' slug' или любой аргумент в шаблоне URL. – Dougal
Очень полезно, спасибо. Это наводит мой разум на правильный путь. – Paragon