1

我有一个使用 URLField 的简单 Django 模型

class Place(Model):

    website = models.URLField(        
        max_length=64,
        blank=True
    )
    ...

website字段由使用应用程序前端的用户填写。我的问题是:我应该清理这个字段还是可以直接在模板中呈现?

<a href={{ website }}>The Place' website</a>

这样做会不会有安全问题?

4

1 回答 1

2

AnURLField只是CharField带有一些正则表达式验证的 a ,可确保输入类似于 URL,因此您的表单将拒绝任何非 URL-like 字符串。

此外,当将 URL 输出到模板时,Django默认对模板变量执行转义

By default in Django, every template automatically escapes the output of every variable tag. 

也就是说,没有什么可以阻止人们发布指向恶意网站或垃圾邮件网站的有效链接,或者将 GET 参数添加到 URL 等,因此您仍然无法确定该网站是否安全。


顺便说一句,在 Django 1.5 之前verify_exists=True/False,您可以使用一个参数来实例化您的参数,URLField该参数将在验证期间对 URL 执行实际的 Web 请求,以查看它是否存在,但这已被贬值

django.db.models.fields.URLField.verify_exists 将被删除。由于棘手的安全和性能问题,该功能在 1.3.1 中已弃用,并且将遵循略微加快的弃用时间框架。

于 2013-08-14T05:52:44.427 回答