![](/img/trans.png)
[英]Linebreaks not displaying in email sent to Outlook via Sharepoint
[英]Permissions to delete spam comments sent in via the Podio Email to item feature
通过电子邮件到项目功能接收未经请求的评论到我们公司的Podio空间中,我们一直处于尴尬而持续的状态。 我们的垃圾邮件偶尔会到达,有时会收到数百封。 从Podio工作区中删除有问题的用户无济于事。 我们当然已经联系了Podio支持,但是他们无法提供帮助。
我认为其他人也有或容易受到同样的侵害。 似乎Kirsten Campbell-Morris在2014年报告了同样的漏洞。
我们的分析是,已经捕获了Podio发送的电子邮件通知,并使用了唯一的回复地址。 根据我们的分析(和理论),这是一个只写漏洞。
在我们的案例中,垃圾邮件很容易被归类为垃圾邮件/火腿:它们全部来自一个用户𝒰,并且始终通过“邮件发送到邮件”功能到达。 除了垃圾邮件之外,我们再也不需要此功能,并且很乐意完全摆脱此管理不善的功能。
我们按照开发的时间顺序,草绘了三种替代解决方案:
有关其他内容(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.)是一个PHP程序,该程序是用Podio PHP客户端编写的,并计划作为cronjob运行。 这个想法是定期(例如每6个小时)进行身份验证,扫描所有项目以查找新评论,并在被视为垃圾邮件时将其删除。 这没有用,因为尽管程序是在管理员用户的API密钥上运行的,但它无权删除用户made发表的注释。
这是通过抓屏并自动按下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.