python - 清理用户输入以包含在 href 属性中?

标签 python django url escaping

我想接受用户输入的网址并将其显示在链接标记的 href 属性部分中。即。

<a href="%(user_input)s">My link name</a>

但我想确保它没有任何恶意内容,例如注入(inject)脚本标签等。清理 user_input 部分的最佳方法是什么?

据我所知:

  • django.utils.html.escape 会转义 &,这是不好的。
  • django.utils.http.urlquotedjango.utils.http.urlquote_plus 会转义 http: 的 : 部分// 还有其他看起来很糟糕的事情。

也许最好的方法是urlquote_plus并指定一些安全字符?

最佳答案

您可以使用模板标签:safe。

假设您的帖子上下文变量是:

user_input = some_valid_url

抓取 user_input,并添加 html 以使其成为链接,并在保存帖子时重新插入它。所以保存的帖子是:

link_text = <a href=user_input>Link</a>

然后在 html 模板中使用 safe:

{{ link_text|safe }}

以下是安全模板标签的文档链接: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe

关于python - 清理用户输入以包含在 href 属性中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314175/

相关文章:

python - 从两个数据框中获取匹配字符串的索引

python - 在 Pandas 中查找包含另一列的行中的特定值的列名称

python - 在 DjangoRestFramework 中没有键的情况下返回 'ReturnList' 的值

python - 删除时序列化模型对象时的AttributeError

javascript - 将 url 插入地址栏

Python - 如何从列表中删除特定单词?

bash - 嵌入在 bash 中的 Python 不工作

wordpress - 将 domain.com/keyword 作为主页 URL

python - ** 之后的 reverse() 参数必须是一个映射

url - ReSTLet - 访问请求 URL 的元素