I just found out that if someone sends a PM to other person. Let’s say from account joe to jane, and for some reason someone (logged in) finds out the right “topic ID” it can read the PM.
I know is kinda a edge-case and is rather difficult to find out, but automating some kind of scraper to cicle trough all the topics ID anyone could read all the PMs.
I found out because a user replied to the notification email, and I was able to click the link and read the PM in question.
I’m assuming you are a staff member on the forum? You should only be able to do this if you are staff. Staff should have the ability to audit PMs by default, and admins and those with access to the DB would have access to the raw messages anyway.
If you’re needing to provide a truly private system, there is the discourse-encrypt plugin which provides end-to-end encryption of messages.
This is only true for admins, not moderators, so I am editing your title which is incorrect. Moderators also only have access to PMs when they are flagged.
If this is a concern, demote yourself to moderator (by logging in under a different account to taste), or enable logging of PM visits by admins in your site settings.
추가 질문 - 관리자가 메시지를 열어서 내용을 읽지 않았더라도, 특정 계정이 보유한 메시지를 확인했을 때 로그를 활성화할 수 있을까요?
저희 포럼의 맥락에서 보면, 관리자는 사용자가 참여 중인 특정 개인 메시지(PM)의 상세 정보만 확인해도 권한을 남용할 수 있습니다. 내용을 읽는 것보다 이름과 어떤 사용자가 접근 권한을 가지고 있는지 아는 것이 더 해로울 수 있으며, 현재 해당 설정이 활성화되어 있음에도 불구하고 이 정보는 로그에 기록되지 않습니다. 이상적으로는 이 문제를 수정하고, 관리자가 특정 메시지의 내용을 볼 때뿐만 아니라 사용자가 참여 중인 메시지를 확인하는 모든 시점에 로그를 기록하도록 하는 것이 바람직합니다.
제 이해로는 그 중 대부분이 로그 기록이 가능한 항목들이며, 실제로 우리가 필요한 것도 바로 그것이라고 생각합니다. 솔직히 말하면, 제가 실수로 사용자의 메시지 페이지를 보게 된 후 아무 일도 없었다는 듯이 넘어갈까 봐 제 자신을 믿기 어렵습니다. 그리고 우리 경우엔 그것이 해로울 수 있습니다(특히 보안 위험이라기보다는 무결성 위험이라고 보는 것이, 이 정보를 알게 된 사용자가 그 사실을 공개하고 관련 주제에서 스스로 회피하기만 하면 장기적인 피해는 발생하지 않는다는 전제에서요).
만약 다른 모든 동일한 데이터 접근 경로와 마찬가지로 로그에 기록된다면, 누가 실수로든 의도적으로든 이 작업을 수행한 후 보고하지 않는 것을 방지하는 데 훨씬 도움이 될 것입니다.
여러분이 나열한 항목들이 로그 기록이 불가능하다면 정말로 가능하도록 만들어야 하지만, 그렇다 하더라도 그것은 악의적인 관리자에는 도움이 되겠지만, 약간 부주의한 관리자에는 도움이 되지 않을 것입니다.
제 주요 문제는 스크립트가 데이터가 업데이트되기 전에 데이터를 가져오는 것 같습니다. 즉, 페이지가 변경될 때 메타데이터는 읽을 수 있지만, 페이지 데이터가 업데이트되기 전에 업데이트가 이루어집니다.
<script type="text/discourse-plugin" version="0.8">
api.onPageChange(() =>{
window.onload = determineUser();
});
function determineUser() {
var pageURL = document.querySelector("meta[property='og:url']").getAttribute("content");
var userPage = pageURL.includes("https://www.fortressoflies.com/u/");
document.documentElement.style.setProperty('--currUsername', pageURL);
if(userPage)
{
document.documentElement.style.setProperty('--lastUsername', pageURL);
}
}
</script>
결국 제 --currUsername은 먼저 업데이트되고, 그 다음에 메타 태그가 새로운 URL로 업데이트되므로, 제 --currUsername은 제가 실제로 보고 있는 페이지보다 항상 한 페이지 뒤처져 있습니다. “window.onload” 라인이 있든 없든 이 문제는 발생합니다.
여기서 제가 어디를 잘못하고 있는지 혹시 아시는 분 계신가요?
최종 목표는 기본적으로 현재 보고 있는 페이지에 따라 body에 클래스를 추가하고, 그에 따라 스타일을 적용하는 것입니다. 이렇게 하면 예를 들어 og:url 필드 대신 title 필드를 읽고, 이 경우 원하는 효과를 얻기 위해 body에 “myMessages” 클래스를 붙일 수 있습니다. 이론적으로는 말이죠.