تخطَّ إلى المحتوى

الإيجابيات الكاذبة

المعرفالقاعدةالشدةالملفالحالة
FP-01ApexCRUDViolationHighObjectTeamMemberTriggerHandler.clsمكبوت — سياق Trigger
FP-02ApexCRUDViolationHighObjectTeamMemberController.cls (TeamMemberSelector)مكبوت — تصميم مقصود
FP-03ApexSOQLInjectionHighObjectTeamMemberTriggerHandler.clsإيجابي كاذب — مصدر آمن
FP-04ApexSOQLInjectionHighShareRecordQueueable.clsإيجابي كاذب — قائمة بيضاء
FP-05ApexSOQLInjectionHighObjectTeamMemberController.clsإيجابي كاذب — مصدر آمن
FP-06DebugStatementsLowملفات متعددةمخاطرة مقبولة

FP-01: ApexCRUDViolation في ObjectTeamMemberTriggerHandler

Section titled “FP-01: ApexCRUDViolation في ObjectTeamMemberTriggerHandler”
السمةالقيمة
الملفObjectTeamMemberTriggerHandler.cls
السطرمستوى الفئة
القاعدةApexCRUDViolation
الشدةHigh
الحالةمكبوت مع @SuppressWarnings

السبب: يعمل معالج trigger هذا في سياق trigger حيث تم بالفعل التحقق من أذونات CRUD بواسطة وحدة التحكم المستدعية (ObjectTeamMemberController). ينفذ المعالج عمليات على مستوى النظام بما في ذلك الإنشاء التلقائي لسجلات Owner وإدارة سجلات المشاركة، والتي تتطلب وصولاً مرتفعًا.

التخفيف: يتم تطبيق فحوصات CRUD في ObjectTeamMemberController قبل أن تصل أي عملية DML إلى trigger.


FP-02: ApexCRUDViolation في TeamMemberSelector

Section titled “FP-02: ApexCRUDViolation في TeamMemberSelector”
السمةالقيمة
الملفObjectTeamMemberController.cls
السطر129-150 (فئة داخلية)
القاعدةApexCRUDViolation
الشدةHigh
الحالةمكبوت مع @SuppressWarnings

السبب: تستخدم الفئة الداخلية TeamMemberSelector عمدًا “without sharing” للسماح للمستخدمين بعرض أعضاء الفريق على السجلات التي لديهم وصول إليها. هذا يعكس سلوك AccountTeamMember القياسي في Salesforce.

التخفيف: يمكن للمستخدمين الوصول إلى هذا فقط عبر مكونات LWC على السجلات التي يمكنهم بالفعل عرضها. يأتي معامل recordId من سياق واجهة المستخدم لسجل قابل للوصول.


FP-03: ApexSOQLInjection في ObjectTeamMemberTriggerHandler

Section titled “FP-03: ApexSOQLInjection في ObjectTeamMemberTriggerHandler”
السمةالقيمة
الملفObjectTeamMemberTriggerHandler.cls
الأسطر135، 305
القاعدةApexSOQLInjection
الشدةHigh
الحالةإيجابي كاذب

السبب: اسم الكائن المستخدم في SOQL الديناميكي مشتق من معرف Salesforce باستخدام طريقة المنصة Id.valueOf(actualRecordId).getSObjectType().getDescribe().getName(). لا يمكن التلاعب بهذا من قبل المستخدمين.

نمط الكود:

String objectName = Id.valueOf(actualRecordId)
.getSObjectType().getDescribe().getName();
String query = 'SELECT OwnerId FROM '
+ String.escapeSingleQuotes(objectName)
+ ' WHERE Id = :actualRecordId';

التخفيف: يأتي اسم الكائن من معرف Salesforce (ليس مدخل مستخدم). يتم استخدام متغيرات الربط للقيم التي يتحكم فيها المستخدم. يتم تطبيق التصفية الإضافية كدفاع متعمق.


FP-04: ApexSOQLInjection في ShareRecordQueueable

Section titled “FP-04: ApexSOQLInjection في ShareRecordQueueable”
السمةالقيمة
الملفShareRecordQueueable.cls
الأسطر138-141، 163-167
القاعدةApexSOQLInjection
الشدةHigh
الحالةإيجابي كاذب

السبب: تأتي أسماء كائنات المشاركة من قائمة بيضاء مشفرة للكائنات القياسية أو تتبع نمطًا حتميًا للكائنات المخصصة.

القائمة البيضاء:

Map<String, String> standardShareObjects = new Map<String, String>{
'Account' => 'AccountShare',
'Contact' => 'ContactShare',
'Case' => 'CaseShare',
'Lead' => 'LeadShare',
'Opportunity' => 'OpportunityShare',
'Campaign' => 'CampaignShare',
'Order' => 'OrderShare'
};

التخفيف: أسماء الكائنات تم التحقق منها مقابل قائمة بيضاء. تتبع الكائنات المخصصة نمطًا آمنًا (ObjectName__c -> ObjectName__Share). يتم استخدام متغيرات الربط لجميع القيم التي يتحكم فيها المستخدم.


FP-05: ApexSOQLInjection في ObjectTeamMemberController

Section titled “FP-05: ApexSOQLInjection في ObjectTeamMemberController”
السمةالقيمة
الملفObjectTeamMemberController.cls
السطر89
القاعدةApexSOQLInjection
الشدةHigh
الحالةإيجابي كاذب

السبب: نفس FP-03. اسم الكائن مشتق من معرف Salesforce باستخدام واجهة برمجة التطبيقات للمنصة.

التخفيف: اسم الكائن من Id.getSObjectType().getDescribe().getName(). لا يمكن تزويره. يتم استخدام متغير الربط لمعرف السجل.


السمةالقيمة
الملفاتObjectTeamMemberTriggerHandler.cls، ShareRecordQueueable.cls، ExpiredTeamMemberCleanupBatch.cls
القاعدةDebugStatements
الشدةLow
الحالةمخاطرة مقبولة

السبب: يتم الاحتفاظ بعبارات التصحيح لاستكشاف الأخطاء وإصلاحها في الإنتاج. يتم تسجيلها فقط على مستويات ERROR/WARN ولا تحتوي على بيانات حساسة.

المحتوى المسجل: رسائل الاستثناءات، عدد السجلات، معلومات حالة المهمة.

التخفيف: يمكن تصفية مخرجات التصحيح عبر إعدادات سجل التصحيح في Salesforce. لا يتم تسجيل PII أو بيانات الاعتماد.

الضبطالحالةالتنفيذ
فحوصات CRUD في وحدات التحكممطبقisAccessible()، isCreateable()، isUpdateable()، isDeletable()
تطبيق FLSمطبقPermission Sets تتحكم في الوصول للحقول
منع حقن SOQLمطبقمتغيرات ربط لمدخلات المستخدم، قائمة بيضاء لأسماء الكائنات
نموذج المشاركةمطبقwith sharing على وحدات التحكم، without sharing فقط حيث موثق
التحقق من المدخلاتمطبقفحوصات null، التحقق من التنسيق، قواعد العمل
منع XSSمطبقإطار عمل LWC يتعامل مع ترميز المخرجات
الفحصالنتيجة
استدعاءات HTTPلا شيء — الحزمة لا تقوم باستدعاءات خارجية
Named Credentialsغير مستخدم
External Objectsغير مستخدم
Remote Site Settingsغير مطلوب