2012-05-04 136 views
3

使用Tastypie清理用戶輸入的最有效方法是什麼?現在,如果用戶輸入類似,HTML標記會被保存,所以當它顯示時,文本顯示爲粗體。除了更改每個資源的obj_create之外,我將如何清理所有輸入?Tastypie消毒輸入?

此外,由於我是網絡安全領域的新手,我是否應該在前端對用戶的輸入進行消毒?我不確定在發送POST請求到tastypie API之前是否應該清理輸入,或者在tastypie處理輸入時是否應該清理輸入?

編輯:我確實發現,我可以在我的下劃線模板中使用<% - %>而不是<%=%>來轉義HTML。爲什麼不下劃線默認做這個?我覺得這是一個很大的安全風險。 如果我不小心忘了在某個地方做這個,那麼我就搞砸了。

我認爲上述問題解決了前端安全問題,但是後端呢?有沒有辦法可以看到我是否容易受到SQL注入?當我執行POST/PUT請求時,tastypie會對輸入進行消毒嗎?

回答

1

永遠永遠不會將不可信的用戶輸入呈現給瀏覽器。在瀏覽器中看到的唯一方法是輸出過濾器上有|safe。不要這樣做。不要在模型中將屬性設置爲mark_safe = True。

+0

通過過濾|安全,你是指Django模板?我沒有使用Django模板來渲染我的模型。我正在使用下劃線模板。另外,在模型中我沒有mark_safe = True,那麼HTML標籤是如何經歷的呢?我會明白,如果下劃線不逃避HTML,但不會Django不存儲HTML標籤? – egidra

+0

沒有關於上述評論。我編輯了原文。 – egidra

+0

我支持我的評論。默認情況下,Django永遠不會顯示不安全的內容。在將數據存入數據庫之前,我不會改變輸入,我只是不會顯示它。很高興知道這是壞的默認值,而不是我們! :)由於不安全的輸入導致django核心或tastypie中沒有已知的SQL注入漏洞。在調用SQL之前,我們正確地轉義了事情 –

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功能,你可以使用它。