2017-05-02 61 views
0

我以同構的方式使用SimpleSchema(node-simpl-schema包)。驗證消息顯示在客戶端以及meteor shell僅使用SimpleSchema進行驗證並不使用允許/拒絕規則是否不安全?

我的問題是這個設置是否實際上是安全的,如果我還需要寫入允許/拒絕規則。

例如:

SimpleSchema.setDefaultMessages 
    messages: 
    en: 
     "missing_user": "cant create a message with no author" 

MessagesSchema = new SimpleSchema({ 
    content: { 
    type: String, 
    label: "Message", 
    max: 200, 
    }, 
    author_id: { 
    type: String, 
    autoform: 
     defaultValue: -> 
     Meteor.userId() 
    custom: -> 
     if !Meteor.users.findOne(_id: @obj.author_id) 
     "missing_user" 
    }, 
    room_id: { 
    type: String, 
    } 
}, {tracker: Tracker}) 

meteor shell我測試它和它的作品如預期。

> Messages.insert({content: "foo", author_id: "asd"}) 
/home/max/Desktop/project/meteor/two/.meteor/local/build/programs/server/packages/aldeed_collection2-core.js:501 
     throw error;                         // 440 
    ^
Error: cant create a message with no author 

我應該在我的允許/拒絕規則中複製這個驗證邏輯嗎?或者我可以讓我的allow函數總是返回true,就像我現在正在做的那樣?

回答

0

我有確保應用程序是安全的一些非常簡單的規則:

  1. 不要使用允許/拒絕規則 - 拒絕所有客戶端的寫請求。
  2. 如果客戶端需要在數據庫中寫入內容,他們必須通過Meteor方法來完成。
  3. 理想情況下,Meteor方法會調用一個函數(可以是共享代碼或特定於服務器的代碼),然後檢查數據庫修改器的有效性(使用Schema)是否在這些函數內完成。
  4. (可選)您還可以創建客戶端方法,在調用服務器端方法之前,它將清理對象並使用該方案執行自己的驗證。
+0

感謝您的回覆。目前我有這個最小允許功能: –

+0

Messages.allow 插入:(用戶ID,消息,字段,修改器) - > 嘗試 MessagesSchema.validate(消息) 真正 卡子E則假 –

+0

我明白,這可能是好的從設計模式的角度來使用方法而不是允許/拒絕。但是,如果我只能使用SimpleSchema,那麼嚴格來說,方法和allow/deny都不是必須的。我想知道這是否確實如此,或者服務器上的SimpleSchema規則可以以某種方式被覆蓋。 –

相關問題