我有一个使用URLField的简单Django模型
class Place(Model):
website = models.URLField(
max_length=64,
blank=True
)
...
website
字段由使用应用程序前端的用户填充。我的问题是:我应该清理这个字段还是可以直接在模板中呈现?
<a href={{ website }}>The Place' website</a>
这样做会出现安全问题吗?
答案 0 :(得分:2)
URLField
只是CharField
some regex validation,可确保输入类似于网址,因此您的表单会拒绝任何非类似URL的字符串。
此外,在将URL输出到模板时,Django会执行escaping on template variables by default:
By default in Django, every template automatically escapes the output of every variable tag.
也就是说,没有什么可以阻止人们发布到恶意网站或垃圾网站的有效链接,或者向网址等添加GET参数,因此您仍然无法确定该网站是否安全。
顺便说一句,在Django 1.5之前,有一个verify_exists=True/False
参数,您可以使用would perform an actual web request to the URL during validation来实例化URLField
,以查看它是否存在,但是this was depreciated :
django.db.models.fields.URLField.verify_exists将被删除。由于难以处理的安全性和性能问题,该功能在1.3.1中已弃用,并且将遵循稍微加快的弃用时间范围。