Skip to main content
مستندات
مرکز آموزش

مدیریت محتوا را با راهنماهای جامع، آموزش‌ها و مستندات API به‌خوبی یاد بگیرید

لینک‌های سریع

اسکن آنتی‌ویروس فایل‌ها

Discuse فایل‌ها را پیش از آن‌که به دست کاربران شما برسند، از نظر بدافزار اسکن می‌کند. برای فراخوانی آن دو راه وجود دارد: فعال‌کردن check_antivirus در POST /api/v2/check برای اسکن URLهای سند در کنار سایر بررسی‌ها، یا استفاده از endpoint اختصاصی POST /api/v2/scan برای اسکن یک فایل واحد و دریافت گزارشی کامل شامل نام تهدید و هش SHA-256.

چرا فایل‌های آپلودشده را اسکن کنیم؟

آپلود فایل یکی از مسیرهای رایج حمله است. انتشار بدافزار از طریق پلتفرم شما، داده‌های کاربران، اعتبار شما و زیرساخت خودتان را در معرض خطر قرار می‌دهد. اسکن هر فایل پیش از ذخیره‌سازی یا ارائه آن، این شکاف امنیتی را می‌بندد.

اسکن چگونه کار می‌کند؟

وقتی URL یک فایل را ارسال می‌کنید، Discuse فایل را در یک محیط ایزوله دانلود می‌کند، آن را اسکن می‌کند و نتیجه می‌دهد که آیا تهدیدی پیدا شده است یا نه. فایل‌های یکسان کش می‌شوند تا اسکن‌های تکراری سریع انجام شوند.

گزینه ۱: اسکن فایل‌ها داخل یک درخواست /check

URLهای سند را در content.document_urls ارسال کنید و check_antivirus را فعال کنید. وقتی در حال مدیریت محتوای پیامی هستید که پیوست هم دارد، این گزینه انتخاب درستی است.

curl -X POST https://api.discuse.com/api/v2/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "content": {
      "document_urls": ["https://example.com/uploaded-file.pdf"]
    },
    "settings": {
      "check_antivirus": true
    }
  }'

هر درخواست حداکثر ۵ URL سند را می‌پذیرد.

پاسخ

{
  "has_violations": true,
  "cached": false,
  "message": "Malware detected in file",
  "results": {
    "hits": true,
    "antivirus": {
      "status": "FOUND",
      "hit": true,
      "details": [
        {
          "type": "malware",
          "details": "Trojan.GenericKD.12345678",
          "result": true
        }
      ]
    }
  }
}

نتیجه آنتی‌ویروس در results.antivirus سه فیلد دارد: status، hit و آرایه‌ای به نام details. هر ورودی details شامل type، details (نام تهدید یا پیام)، confidence و result است.

گزینه ۲: اسکن یک فایل واحد با /api/v2/scan

endpoint اختصاصی اسکن، برای یک فایل گزارشی کامل‌تر برمی‌گرداند که شامل نام تهدید، هش فایل و مدت‌زمان اسکن است.

curl -X POST https://api.discuse.com/api/v2/scan \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "file_url": "https://example.com/uploaded-file.pdf",
    "file_name": "uploaded-file.pdf"
  }'

پاسخ

{
  "hit": true,
  "status": "FOUND",
  "description": "Trojan.GenericKD.12345678",
  "file_name": "uploaded-file.pdf",
  "file_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "scan_time_ms": 1250
}

فیلدهای درخواست /api/v2/scan

فیلد نوع نکات
api_key string در بدنه اختیاری است؛ به‌جای آن می‌توانید X-API-Key را ارسال کنید
file_url string URL فایلی که باید اسکن شود
file_name string نام فایل اختیاری برای گزارش

file_url را ارائه کنید. file_data به‌صورت Base64 در schema تعریف شده است، اما هنوز پشتیبانی نمی‌شود — درخواستی که فقط file_data داشته باشد، خطایی برمی‌گرداند و از شما می‌خواهد از file_url استفاده کنید.

فیلدهای پاسخ /api/v2/scan

فیلد نوع توضیح
hit boolean وقتی بدافزار شناسایی شده باشد، True است
status string OK (پاک)، FOUND (بدافزار)، یا ERROR
description string نام تهدید، یا پیام خطا
file_name string نام فایل اسکن‌شده
file_hash string هش SHA-256 فایل
scan_time_ms number مدت‌زمان اسکن بر حسب میلی‌ثانیه

محدودیت‌های استفاده

اسکن آنتی‌ویروس فقط در پلن‌های پولی در دسترس است. هر فایل اسکن‌شده یک‌بار از سهمیه کم می‌کند.

پلن اسکن‌های ماهانه نرخ مصرف مازاد
Basic در دسترس نیست -
Gold 500 $0.001/scan
Platinum 1,500 $0.00085/scan (15% discount)
Ultimate 3,000 $0.00075/scan (25% discount)

اگر پروژه‌ای اشتراک فعال نداشته باشد، اسکن‌های آنتی‌ویروس رد می‌شوند.

بهترین روش‌ها

پیش از ذخیره‌سازی اسکن کنید

فایل را پیش از ذخیره‌سازی دائمی اسکن کنید تا فایل آلوده هرگز وارد سیستم شما نشود:

async function handleFileUpload(fileUrl, fileName) {
  const result = await scanFile(fileUrl, fileName);

  if (result.hit) {
    throw new Error('Infected file detected: ' + result.description);
  }
  await storeFile(fileUrl);
}

بر اساس status مسیر را جدا کنید

فایل پاک را از اسکن ناموفقی که انجام نشده یا خطا داده است، متمایز کنید:

const result = await scanFile(fileUrl, fileName);

switch (result.status) {
  case 'FOUND': await rejectAndNotify(fileUrl, result.description); break;
  case 'ERROR': await quarantineForReview(fileUrl); break;
  case 'OK':    await storeFile(fileUrl); break;
}

از URLهای ثابت و یکسان استفاده کنید

فایل‌های یکسان کش می‌شوند. استفاده از URLهای پایدار برای فایل‌ها باعث می‌شود اسکن‌های تکراری به‌جای دانلود دوباره، از کش برگردند.

نمونه‌های یکپارچه‌سازی

Node.js (endpoint اختصاصی اسکن)

async function scanFile(fileUrl, fileName) {
  const response = await fetch('https://api.discuse.com/api/v2/scan', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({ file_url: fileUrl, file_name: fileName })
  });

  return response.json();
}

Python (endpoint اختصاصی اسکن)

import os
import requests

def scan_file(file_url, file_name=None):
    response = requests.post(
        'https://api.discuse.com/api/v2/scan',
        headers={
            'Content-Type': 'application/json',
            'X-API-Key': os.environ['DISCUSE_API_KEY']
        },
        json={'file_url': file_url, 'file_name': file_name}
    )
    return response.json()

آماده‌اید پلتفرم خود را در برابر بدافزار محافظت کنید؟ شروع کار با Discuse.

نوشته تیم Discuse · آخرین به‌روزرسانی June 2026

مقاله‌های مرتبط

تحلیل متن و تشخیص احساسات

هرزنامه، محتوای سمی، الفاظ رکیک را تشخیص دهید و احساسات را در محتوای متنی تحلیل کنید

تشخیص NSFW در تصویر

تصاویر نامناسب و محتوای بزرگسالان را به‌طور خودکار تشخیص داده و فیلتر کنید

تشخیص هرزنامه

فیلتر کردن هرزنامه مبتنی بر AI برای متن و پیام‌ها