3

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

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

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

我认为以上解决了前端安全问题,但后端呢?有没有办法可以查看我是否容易受到 SQL 注入的影响?当我执行 POST/PUT 请求时,tastepie 会清理输入吗?

4

2 回答 2

1

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

于 2012-05-04T23:01:46.787 回答
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 函数,你可以使用它。

于 2012-09-03T08:10:50.020 回答