Безопасно ли {{portfolio.description|safe}}?

У меня сайт проект на django в странице html следующий код:

<strong>{{portfolio.begin|safe}} - {{portfolio.finish|safe}}:</strong> {{portfolio.location|safe}}
<strong>Должность:</strong> {{portfolio.specialization|safe}}
<strong>Дополнительная информация:</strong> {{portfolio.responsibilities|safe}}
<strong>Достижения:</strong> {{portfolio.progress|safe}}

Решил заняться безопасностью веб сервера, и вычитал, что так заполнять информацию из базы небезопасно. Безопасно ли использовать такие параметры? Как лучше передавать параметры из базы в html???

Весь код тут: https://github.com/it38dato/MyPortfolio/blob/main/dato138it/david138it/index.html

Исходя из документаци, safe помечает значение, как уже безопасное. Значит система шаблонов не будет дальше делать ее безопасной с помощью autoescape, а это дыра.

Чтобы понять, что делать в конкретном случае, нужно разобраться, что у вас хранится -- текст или хтмл. И как оно туда попало и т. д.


Есть 2 варианта:

  1. safe нужно писать, если в базе лежит HTML полученный из надежного источника.
  2. safe нельзя писать, если в базе лежит текст без разметки.

Если перепутать эти варианты, то можем получить ерунду на экране.

Вернуться на верх