2015-02-23 83 views
3

我在Django中創建了一個小型SaaS應用程序。它收集來自不同組織的網絡服務器的數據。偶爾它會自動發送通知郵件給他們的客戶(域名所有者)。讓用戶編輯電子郵件中應用程序中的電子郵件Django模板是否安全?

我想讓我們的用戶(主持人)在發送郵件之前將電子郵件模板更改爲他們的喜好/需求。電子郵件模板是普通的Django模板,包括一些可用的變量。所以,我爲電子郵件模板創建了一個模型。用戶可以通過表單進行編輯。每個電子郵件模板都可以訪問有限數量的模板變量。

我需要注意哪些安全問題/風險?或者是建議這種方法。

我的方法目前是針對電子郵件的服務器端渲染。我還檢查了一些客戶端渲染解決方案,比如Dust.js,但我還不確定它會對我有幫助。

回答

0

我相信這裏已經有很多答案了,但要總結一下我發現的東西:這樣做是「安全的」,但要小心你向用戶公開的變量/對象(即包含在要呈現的模板上下文中)。

render_to_string('template_name.txt', {'user': Users})將是非常糟糕的:)

+0

感謝您的快速回復。直到現在,我還沒有找到任何直接的答案,因此,我發佈了這個問題。 – 2015-02-23 14:41:59

+0

...關於你的代碼片段,上下文被設置爲一組變量。用戶只能使用該組來編輯'template_name.txt'。注射有危險嗎? – 2015-02-23 14:43:21

+0

當然,如果您使用我的代碼示例,他們可以'注入'user.objects.all並獲取所有用戶信息。所以唯一的危險是你在上下文變量中提供的內容。只要你小心,不應該有任何真正的風險。 – 2015-02-23 15:21:56

-1

這一切都取決於其中的模板將被評估的情況下,只要確保不變量傳遞應考慮私有。

此外,如果在Django模板系統中發現安全錯誤,您的Web應用程序將面臨風險。你將不得不驗證輸入,但你不能這樣做,因爲輸入沒有任何特定的結構。

因此,如果可以的話,嘗試從應用程序的其餘部分進行沙盒處理。或者只是問問自己,這個功能是否真的有必要,如果你不能通過使用清單或類似的東西讓用戶指定包含在信息中的內容。此時,驗證輸入變得微不足道,您不必將完整的模板公開給用戶。