Tastypie消毒输入?

时间:2012-05-04 06:25:41

标签: django tastypie

使用Tastypie清理用户输入的最有效方法是什么?现在,如果用户输入类似 hi 的内容,则会保存HTML标记,因此在显示时,文本将显示为粗体。除了更改每个资源的obj_create之外,我如何清理所有输入?

另外,由于我是网络安全的新手,我是否应该在前端消毒用户的输入?我不确定在将POST请求发送到tastypie API之前是否应该清理输入,或者当tastypie处理输入时我是否应该清理输入?

编辑:我确实通过使用<% - %>显示数据,发现我可以在下划线模板中转义HTML而不是<%=%>。为什么没有下划线默认执行此操作?我觉得这是一个很大的安全风险。 如果我不小心忘记在某个地方做这件事,那我就搞砸了。

我认为以上修复了前端安全问题,但后端呢?我是否有办法看到我是否容易受到SQL注入攻击?当我发出POST / PUT请求时,tastypie会清理输入吗?

2 个答案:

答案 0 :(得分:1)

永远,永远,永远不会将不受信任的用户输入呈现给浏览器。您在浏览器中看到的唯一方法是输出过滤器上有|safe。不要那样做。不要在模型中将属性设置为mark_safe = True。

答案 1 :(得分:0)

我在资源上添加了一个脱水方法,覆盖了浏览器上的危险字段,如下所示:

def dehydrate(self, bundle):
    bundle.data['field_to_sanitize'] = bundle.data['field_to_sanitize'].replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("'", "&#39;").replace('"', "&quot;")
    return bundle

现在,这不是最好的解决方案,但它会逃脱许多最危险的实体。如果你有一个方便的htmlescape函数,你可以使用它。