Canapin
(Coin-coin le Canapin)
12월 23, 2022, 4:20오후
1
안녕하세요!
매일 "이 새 사용자는 주제나 게시물을 읽지 않고 프로필 정보를 입력했습니다"라는 이유로 스팸 계정으로 표시되는 계정이 열두 개나 발견됩니다.
2년 동안 오인(false positive) 사례가 0건이었습니다.
따라서 이 특정 이유로 표시된 계정은 자동으로 삭제할 수 있지 않을까 생각해 보았습니다.
선택적으로, 삭제 전에 수신자에게 이메일을 자동 발송하여 계정이 자동으로 삭제되었음을 알리고, 포럼을 통해 관리자에게 이메일로 문의할 수 있음을 언급할 수도 있습니다.
Discourse Automation 을 확인해 보았지만, 기본적으로는 이를 지원하지 않습니다.
discourse automation 메서드를 사용하여 플러그인을 코딩하는 것이 가능할까요, 아니면 처음부터 새로 코딩해야 할까요?
아니면 이 끝없는 스팸이 검토 목록으로 넘어가는 것을 방지하는 더 쉬운 방법이 있을까요?
Canapin
(Coin-coin le Canapin)
12월 31, 2022, 2:17오후
2
그래서 이번에는 웹훅(Webhooks)을 시도해 보려고 합니다. 아직 한 번도 사용해 본 적이 없거든요.
Use Discourse webhooks with PHP 를 템플릿으로 사용했는데, Discourse로 데이터를 정상적으로 반환하고 있습니다.
하지만 "사용자가 너무 빠르게 입력함"이나 "게시물을 읽지 않고 프로필을 작성함"과 같은 수동으로 검토 가능한 스팸 항목을 만들어야 합니다. 어떻게 하면 될지 아이디어가 있을까요?
Canapin
(Coin-coin le Canapin)
1월 7, 2023, 7:52오후
3
동작하게 만들었습니다.
Insomnia로 사용자를 생성하고, Akismet 트리거로 해당 사용자의 프로필을 채우면 Review가 트리거됩니다.
몇 가지 체크가 수행된 후 사용자가 자동으로 삭제됩니다.
사용자 삭제를 트리거하는 스크립트의 Review 속성은 다음과 같습니다:
Type: ReviewableAkismetUser, ReviewableUser 또는 ReviewableQueuedPost
Score > 0
@system을 제외한 다른 사용자에 의해 플래그된 사용자는 자동으로 삭제하지 않으려 합니다.
제가 사용하는 PHP 스크립트는 다음과 같습니다:
<?php
// 요청의 진위를 즉시 검증합니다.
if (array_key_exists('HTTP_X_DISCOURSE_EVENT_SIGNATURE', $_SERVER)) {
$discourse_payload_raw = file_get_contents('php://input');
$discourse_payload_sha256 = substr($_SERVER['HTTP_X_DISCOURSE_EVENT_SIGNATURE'], 7);
// 보안을 위해 Discourse에서 웹훅에 시크릿을 구성하고 아래에 설정하세요.
$discourse_payload_secret = '2J3tM5X4WYGkGp0tTkmu';
// 요청이 권한 있는 웹훅에서 전송되었는지 검증합니다.
if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
echo 'received';
}
else {
die('authentication failed');
}
}
else {
die('access denied');
}
// 페이로드를 PHP 스크립트에서 사용할 수 있도록 준비합니다.
$discourse_json = json_decode($discourse_payload_raw);
$reviewable = $discourse_json->reviewable;
// API URL 설정
$api_url = "https://discourse.canapin.com/review/$reviewable->id/perform/delete_user?version=0";
//$api_url = "https://discourse.canapin.com/review/$reviewable->id/perform/delete_user?version=$reviewable->version";
// "type" 및 "score" 속성이 유효한지 검증합니다
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
// curl 옵션 설정
$options = array(
CURLOPT_URL => $api_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "PUT", // 요청 방법을 PUT으로 설정
CURLOPT_HTTPHEADER => array(
"Api-Key: 6666666666666666666666666666666666666666666",
"Api-Username: system"
)
);
// curl 세션 초기화
$curl = curl_init();
curl_setopt_array($curl, $options);
// API 호출 수행
$response = curl_exec($curl);
curl_close($curl);
// 응답 디코딩
$response_data = json_decode($response);
print_r($response_data);
} else {
exit;
}
?>
0에서 10까지의 척도로… 작동할 맥락(2년 동안 Discourse와 Akismet 감지에서 오탐 0건)을 고려할 때 얼마나 지저분한 신뢰할 수 있는지 궁금합니다.
Discourse가 사용자가 잠재적인 스팸 계정으로 감지될 때 시작하는 리뷰 요청 페이로드에 대해 몇 가지 질문이 있습니다.
서로 다른 페이로드 간 차이가 최소인 동일한 ReviewableUser에 대해 왜 2개의 요청이 있는가요? (첫 번째 요청은 왼쪽에 있음)
link_admin은 무엇을 의미하나요?
리뷰 패널에서 수동으로 사용자를 삭제할 때(Akismet에 의해 감지된 경우), 새로운 페이로드를 포함하여 리뷰 웹훅이 트리거되며, 그 중에는 "user_deleted": false가 포함되어 있습니다. 이 값은 true가 되어야 하지 않나요?
URL https://discourse.canapin.com/review/355/perform/delete_user?version=0"에서 "version"은 페이로드에서 발견되는 "version"을 가리키는 건가요? 이 파라미터를 신경 써야 하나요? 페이로드의 version 파라미터와 같아야 하나요?
Canapin
(Coin-coin le Canapin)
1월 14, 2023, 12:22오후
4
현재 상태로는 이것이 작동할 것이라고 꽤 자신 있습니다(음, 대부분 직감이지만…) 그리고 웹훅 결과를 확인하여 잠재적인 문제를 추적할 수 있습니다…
또는 검토된 항목 목록을 표시할 수도 있습니다.
하지만 여기서 제가 파악하지 못하는 문제가 있습니다.
때로는 검토된 항목 목록이 다음과 같이 어떤 정보도 없이 표시됩니다:
때로는 다음과 같이 표시됩니다:
잘못 삭제된 오탐(false positive)이 있었는지 더 쉽게 추적할 수 있도록 모든 정보를 유지하고 싶습니다.
이러한 행동이 어디서 비롯되는지 아이디어가 있으신가요?
어떤 시점 이후로 자동 삭제 후 발생하는 것 같지만, 어떻게 그리고 왜 그런지 알 수 없습니다.
추가로, Discourse 인터페이스에서 누락된 모든 정보가 검토된 항목 페이지의 JSON 버전에는 포함되어 있습니다.
수정: 해결했습니다. 이는 Akismet 플러그인을 비활성화했을 때 발생하는 현상입니다.
Ed_S
(Ed S)
1월 14, 2023, 5:04오후
5
참고로, 이 알림이 몇 번 정도 뜨는 것을 봤고, 한 번은 오탐이었습니다. 프로필을 먼저 채우는 합리적이고 세심한 새 회원이었거든요. 그래서 이런 일이 일어날 수 있습니다.
Canapin
(Coin-coin le Canapin)
1월 14, 2023, 5:09오후
6
네. 솔직히 말하자면, 지난 2년여 동안 (제가 아는 한) 오탐(false positive)이 1건 있었습니다.
해당 사용자는 이메일로 저에게 연락을 주셨는데, 이는 사용자가 문제를 겪을 경우 웹사이트에서 쉽게 찾을 수 있는 연락처입니다.
제 경우처럼 수천 명의 사용자를 수동으로 검토해 본 경험에 비추어 볼 때, 이 자동 삭제 기능의 이점은 매우 명확하다고 생각합니다. 특히 이 곳은 특정 주제에 관심 있는 사람들이 모인 니치 포럼이므로, 정말로 해당 주제에 관심이 있는 사용자라면 불편함이 생기면 반드시 우리에게 연락을 할 것이기 때문입니다.