簡體   English   中英

有權刪除通過Podio郵件發送到項目功能發送的垃圾郵件評論

[英]Permissions to delete spam comments sent in via the Podio Email to item feature

通過電子郵件到項目功能接收未經請求的評論到我們公司的Podio空間中,我們一直處於尷尬而持續的狀態。 我們的垃圾郵件偶爾會到達,有時會收到數百封。 從Podio工作區中刪除有問題的用戶無濟於事。 我們當然已經聯系了Podio支持,但是他們無法提供幫助。

我認為其他人也有或容易受到同樣的侵害。 似乎Kirsten Campbell-Morris在2014年報告了同樣的漏洞。

我們的分析是,已經捕獲了Podio發送的電子郵件通知,並使用了唯一的回復地址。 根據我們的分析(和理論),這是一個只寫漏洞。

在我們的案例中,垃圾郵件很容易被歸類為垃圾郵件/火腿:它們全部來自一個用戶𝒰,並且始終通過“郵件發送到郵件”功能到達。 除了垃圾郵件之外,我們再也不需要此功能,並且很樂意完全擺脫此管理不善的功能。

我們按照開發的時間順序,草繪了三種替代解決方案:

  1. 定期清理程序
  2. 針對DOM運行的JavaScript程序
  3. Webhook端點

有關其他內容(1.和2)的描述,請參見下文。但是,我們更願意使用webhooks來使用最新的想法(3.)。 這個想法是為工作區中的所有應用程序comment-create一個或單獨的comment-create掛鈎。 它會收到有關注釋創建的HTTP請求,使用Podio API進行身份驗證,獲取有問題的注釋,確定是否為垃圾郵件,並在必要時將其刪除(例如說,在我們的情況下,確定垃圾郵件很簡單)。

我將這個想法實現為最小的Lumen API端點。 收到帶有以下JSON有效負載的webhook請求時

{
    "item_id": "yyyyyyyyy",
    "hook_id": "zzzzzzz",
    "type":"comment.create"
}

它被傳遞給PodioComment::get()進行決策。

問題是刪除操作[ PodioComment::delete()](https://developers.podio.com/doc/comments/delete-a-comment-22347) receives a PodioForbiddenError`,盡管它使用來自用戶的令牌進行身份驗證𝒰。

PHP堆棧跟蹤

 PodioForbiddenError in Podio.php line 319 at Podio::request('DELETE', '/comment/xxxxxxxx', array()) in Podio.php line 358 at Podio::delete('/comment/xxxxxxxx') in PodioComment.php line 46 at PodioComment::delete(xxxxxxxx) in CommentController.php line 116 

這里發生了什么? 我不能正確認證嗎? 我可以執行其他任務,例如獲取評論和其他Podio項,以及Podio::setup()Podio::authenticate_with_app()成功運行,並帶有客戶端ID和密碼,以及應用程序ID和令牌。

我們目前的理論是,“ 電子郵件到項目”功能是一個單獨的應用程序(具有自己的app_id )。 如果這是正確的,我們如何才能通過該應用進行身份驗證以從中刪除評論? 如果沒有,我們還可以刪除垃圾評論嗎? 我們如何檢查自定義程序對各種Podio項目具有哪些權限?

解決方案1和2的詳細信息。

解決方案草圖1.定期清理程序(不起作用)

其中的第一個(1.)是一個PHP程序,該程序是用Podio PHP客戶端編寫的,並計划作為cronjob運行。 這個想法是定期(例如每6個小時)進行身份驗證,掃描所有項目以查找新評論,並在被視為垃圾郵件時將其刪除。 這沒有用,因為盡管程序是在管理員用戶的API密鑰上運行的,但它無權刪除用戶made發表的注釋。

解決方案草圖2.針對DOM運行的JavaScript程序(在手動支持的情況下有效)

這是通過抓屏並自動按下Web UI上的按鈕進行的​​。

我們以用戶login登錄,導航到他們的活動流,打開瀏覽器開發人員工具,將以下程序復制粘貼到控制台中,然后喝咖啡。 這繞過了(1.)和(3.)的身份驗證問題,但是操作麻煩並且容易出錯。

// Add the user id to remove in here. There is a good chance it is
// a six-digit number
var spamUid = 'xxxxxx';

// Consider only comments made after this date
var spamDate = new Date(2018, 04, 01);

var spamUserUrl = 'https://podio.com/users/' + spamUid;

var mnum = {
    'January': 0,
    'February': 1,
    'March': 2,
    'April': 3,
    'May': 4,
    'June': 5,
    'July': 6,
    'August': 7,
    'September': 8,
    'October': 9,
    'November': 10,
    'December': 11
}

var titleToDate = (title) => {
    re = /(\s*\d*) ([A-Za-z]*) (\d{4}) (\d*):(\d*)/;
    [, D, M, Y, h, m] = re.exec(title);
    d = new Date(Y, mnum[M], D, h, m);
    return d;
}

var throttling = 2000;

var spamComments = jQuery('.comment')
    .filter((i, c) => jQuery(c).find('.comment_byline > a')[0].href == spamUserUrl)
    .filter((i, c) => jQuery(c).find('.timestamp > time')[0].title != "")
    .filter((i, c) => titleToDate(jQuery(c).find('.timestamp > time')[0].title) > spamDate);

console.log("Found " + spamComments.length + " comments to delete");

spamComments.each((i, c) => {
    c.style.border = '5px red dotted';
    setTimeout(() => {
    console.log("deleting 💩", c);
    jQuery(c).find('.js-delete-comment').click();
    jQuery('.confirm-button')[0].click();
    }, i * throttling);
});

請聯系Podio支持。 我們有解決方案來阻止這種情況:)

作為記錄,我們確實聯系了Podio支持,這一次他們很熱心,並表示問題已解決。 我不知道他們該如何處理,但此后我們還沒有收到垃圾郵件。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM