অনিরাপদ সম্প্রচার রিসিভার

OWASP বিভাগ: MASVS-PLATFORM: প্ল্যাটফর্ম মিথস্ক্রিয়া

সংক্ষিপ্ত বিবরণ

ত্রুটিপূর্ণভাবে প্রয়োগ করা ব্রডকাস্ট রিসিভারের মাধ্যমে একজন আক্রমণকারী একটি ক্ষতিকারক ইনটেন্ট পাঠাতে পারে, যার ফলে দুর্বল অ্যাপ্লিকেশনটি এমন সব কাজ সম্পাদন করে যা বহিরাগত ব্যবহারকারীদের জন্য উদ্দিষ্ট নয়।

এই দুর্বলতাটি সাধারণত সেইসব ক্ষেত্রে ঘটে যেখানে ব্রডকাস্ট রিসিভারটি অনিচ্ছাকৃতভাবে এক্সপোর্ট করা হয়। এটি হতে পারে AndroidManifest-এ android:exported="true" সেট করার মাধ্যমে অথবা প্রোগ্রাম্যাটিকভাবে একটি ব্রডকাস্ট রিসিভার তৈরি করার মাধ্যমে, যা ডিফল্টরূপে রিসিভারটিকে পাবলিক করে দেয়। যদি রিসিভারটিতে কোনো ইন্টেন্ট ফিল্টার না থাকে, তবে এর ডিফল্ট মান "false" হয়, কিন্তু যদি রিসিভারটিতে অন্তত একটি ইন্টেন্ট ফিল্টার থাকে, তবে android:exported-এর ডিফল্ট মান "true" হয়ে যায়।

যথাযথ অ্যাক্সেস কন্ট্রোল ছাড়া ইচ্ছাকৃতভাবে এক্সপোর্ট করা ব্রডকাস্ট রিসিভারগুলোর অপব্যবহার হতে পারে, যদি ডেভেলপার না চান যে সব অ্যাপ্লিকেশন এটিকে কল করুক।

প্রভাব

অনিরাপদভাবে প্রয়োগ করা ব্রডকাস্ট রিসিভারগুলোকে একজন আক্রমণকারী অপব্যবহার করে অ্যাপ্লিকেশনের এমন কার্যকলাপ সম্পাদনের জন্য অননুমোদিত অ্যাক্সেস লাভ করতে পারে, যা ডেভেলপার তৃতীয় পক্ষের কাছে প্রকাশ করতে চাননি।

প্রশমন

সমস্যাটি পুরোপুরি এড়িয়ে চলুন

দ্বিধাটি সম্পূর্ণরূপে সমাধান করতে, exported false এ সেট করুন:

<receiver android:name=".MyReceiver" android:exported="false">
    <intent-filter>
        <action android:name="com.example.myapp.MY_ACTION" />
    </intent-filter>
</receiver>

কল এবং কলব্যাক ব্যবহার করুন

যদি আপনি অ্যাপের অভ্যন্তরীণ কাজের জন্য (যেমন, ইভেন্ট সম্পন্ন হওয়ার নোটিফিকেশন) ব্রডকাস্ট রিসিভার ব্যবহার করে থাকেন, তাহলে আপনি আপনার কোডটি পুনর্গঠন করে ইভেন্ট সম্পন্ন হওয়ার পর চালু হওয়ার জন্য একটি কলব্যাক পাস করতে পারেন।

ইভেন্ট সমাপ্তি শ্রোতা

কোটলিন

interface EventCompletionListener {
    fun onEventComplete(data: String)
}

জাভা

public interface EventCompletionListener {
    public void onEventComplete(String data);
}
নিরাপদ কাজ

কোটলিন

class SecureTask(private val listener: EventCompletionListener?) {
    fun executeTask() {
        // Do some work...

        // Notify that the event is complete
        listener?.onEventComplete("Some secure data")
    }
}

জাভা

public class SecureTask {

    final private EventCompletionListener listener;

    public SecureTask(EventCompletionListener listener) {
        this.listener = listener;
    }

    public void executeTask() {
        // Do some work...

        // Notify that the event is complete
        if (listener != null) {
            listener.onEventComplete("Some secure data");
        }
    }
}
প্রধান কার্যকলাপ

কোটলিন

class MainActivity : AppCompatActivity(), EventCompletionListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val secureTask = SecureTask(this)
        secureTask.executeTask()
    }

    override fun onEventComplete(data: String) {
        // Handle event completion securely
        // ...
    }
}

জাভা

public class MainActivity extends AppCompatActivity implements EventCompletionListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SecureTask secureTask = new SecureTask(this);
        secureTask.executeTask();
    }

    @Override
    public void onEventComplete(String data) {
        // Handle event completion securely
        // ...
    }
}

অনুমতি সহ সুরক্ষিত সম্প্রচার রিসিভার

শুধুমাত্র সুরক্ষিত ব্রডকাস্টের (যেসব ব্রডকাস্ট কেবল সিস্টেম লেভেল অ্যাপ্লিকেশনই পাঠাতে পারে) জন্য অথবা স্ব-ঘোষিত সিগনেচার লেভেল পারমিশনসহ ডাইনামিক রিসিভার রেজিস্টার করুন।

সম্পদ